代码之家  ›  专栏  ›  技术社区  ›  Tuğberk Kaan Duman

如何选择列表中的项目?

  •  0
  • Tuğberk Kaan Duman  · 技术社区  · 6 年前

    我有:

    我有两个这样的列表:

    [('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 回复  |  直到 6 年前
        1
  •  2
  •   blacksite    6 年前
    # 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
    

    第一次测试, 'True' in sample_result 返回false,这样就不会触发追加逻辑,从而传递该元素。

        2
  •  0
  •   mrj    6 年前

    注意:变量'name_list'不是一个列表,而是一个字符串。当您想要附加到它时,请记住这一点。

    清单理解是完美的,但是如果你正在学习并且想更明确地去做, 您可以循环遍历每个列表中的每个元组。对于每个列表,可以检查第二个参数是否为真,如果为真,则将其添加到字符串(“name_list”)。

    for tup in l1:
        if tup[1]:
            name_list += tup[0]
    
        3
  •  0
  •   Kian    6 年前

    试试这个:

    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)
    
        4
  •  0
  •   Prayson W. Daniel    6 年前

    您也可以这样做:

    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)))