Как я могу выбрать элемент в списке? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть:

У меня есть два списка вроде этого:

[('ELON_MUSK', True), ('BARACK_OBAMA', False), ('DONALD_TRUMP', False)]
[('ELON_MUSK', False), ('BARACK_OBAMA', True), ('DONALD_TRUMP', False)]

Я хочу (проблема):

Поскольку ELON_MUSK и BARACK_OBAMA - это true Я хочу получить их и добавить в строку, однако я почти уверен, что не знаю, как искать проблему в правильных терминах, так как нашелничего об этом, поэтому спрашиваю здесь.

Я ожидаю, что произойдет:

People in this image: ELON_MUSK BARACK_OBAMA

Я делаю:

for imagePath in imageArray:
        # Try comparing an unknown image
        unknown_image = face_recognition.load_image_file(imagePath)
        unknown_face = face_recognition.face_encodings(unknown_image)
        face_count = len(unknown_face)
        name_list = ""
        print("Checking: " + imagePath)
        print("----------------------------")
        for i in range(face_count):
                result = face_recognition.compare_faces(face_encodings, unknown_face[i])
                # Print the result as a list of names with True/False
                names_with_result = list(zip(face_names, result))
                print(names_with_result, end = '')
                print(" -- Checking face #" + str(i+1))
                # vvv I HAVE NO IDEA ABOUT THIS PART vvv
                if "True" in names_with_result:
                        #name_list = name_list + " name of the TRUE person";
        print("People in this image: " + name_list)

Я получаю:

People in this image: 

Ответы [ 4 ]

0 голосов
/ 01 декабря 2018

Вы также можете сделать это:

l1 = [('ELON_MUSK', True), ('BARACK_OBAMA', False), ('DONALD_TRUMP', False)]
l2 = [('ELON_MUSK', False), ('BARACK_OBAMA', True), ('DONALD_TRUMP', False)]

# join the two list
l1.extend(l2)

# create a simple function that return a list of true

f = lambda x: [i for i,j in x if j]

print('{} is not {}'.format(*f(l1)))
0 голосов
/ 01 декабря 2018
# Separate lists of (name, is_in_image) tuples
>>> a = [('ELON_MUSK', True), ('BARACK_OBAMA', False), ('DONALD_TRUMP', False)]
>>> b = [('ELON_MUSK', False), ('BARACK_OBAMA', True), ('DONALD_TRUMP', False)]
# Combine the lists
>>> together = a + b
# Create a list containing all names if the second element (is_in_image) is True
>>> [name for name, is_in_image in together if is_in_image]
['ELON_MUSK', 'BARACK_OBAMA']
>>> print('People in this image: {}'.format(', '.join([name for name, is_in_image in together if is_in_image])))
People in this image: ELON_MUSK, BARACK_OBAMA

Я думаю, что основная проблема с вашим текущим подходом состоит в том, что ваш тест на добавление if 'True' in names_with_result, а не if True in names_with_result ... 'True' != True ...

>>> sample_result = ('ELON_MUSK', True)
>>> 'True' in sample_result
False
>>> True in sample_result
True

Первыйtest, 'True' in sample_result возвращает значение False, которое затем не вызовет добавленную логику, передавая этот элемент.

0 голосов
/ 01 декабря 2018

Попробуйте это:

A= [('ELON_MUSK', True), ('BARACK_OBAMA', False), ('DONALD_TRUMP', False)]
B= [('ELON_MUSK', False), ('BARACK_OBAMA', True), ('DONALD_TRUMP', False)]


name_list  = ''.join([a[0]+' , '+b[0] for a in A for b in B if a[1]==True and b[1]== True])
print("People in this image: "+ name_list)
0 голосов
/ 01 декабря 2018

Примечание. Ваша переменная name_list - это не список, а строка.Имейте это в виду, когда вы хотите добавить к нему.

Понимание списков идеально, но если вы учитесь и хотите делать это более явно, вы можете просмотреть каждый кортеж в каждом списке.Для каждого списка вы можете проверить, является ли второй аргумент истинным, и если да, добавить его в строку ('name_list').

for tup in l1:
    if tup[1]:
        name_list += tup[0]
...