如何在 Python 中检查一个元素是否存在于一个列表的列表中?

5

我有一个列表的列表,对应于文件中的行,具有多个列。

[[col1, col2, col3], [elem1, elem2, elem3], [elem4, elem5, elem6]] 

我想检查(例如)elem3是否在任何一个列表中,如果是,则进入该列表。(实际上我有一些需要检查的事物列表,因此这是一个可能包含elem3elem5elem7等的列表)

“go into that list” 您到底是指什么? - NPE
只需返回翻译后的文本:只需返回它(我打算评估列表中的其他元素)。就好像我正在使用elem3作为列表中的键。不幸的是,该文件没有设置为字典。 - user3264659
你的问题已在这里得到回答:https://dev59.com/uXM_5IYBdhLWcg3w8ILR#1156143 - karthikr
列表中的元素是什么类型?数字、字符串、对象、混合? - Roger Fan
列表的元素是整数(尽管它可能是一个字符串,但我不知道CSV文件如何读取,如果有什么转换)。 - user3264659
显示剩余2条评论
4个回答

4

最短的方法是使用列表推导式,有时候列表推导式比简单的for循环更快。

你的列表:

list1 =  [ ["col1", "col2", "col3"], ["elem1", "elem2", "elem3"], ["elem4", "elem5", "elem6"] ]

您需要查找的元素:

to_find = "col1"

您的功能是“进入该列表”:
def do_something(sub_list):
    print (sub_list)

并且 列表解析 将找到您的元素并调用包含它的列表的函数:

[do_something(sub_list) for sub_list in list1 if to_find in sub_list]

1
请注意,这并没有真正避免@BobbyRussell答案中的嵌套循环问题。它只是隐藏了它。列表推导式与for循环基本具有相同的性能。 - Roger Fan
谢谢。也许我只需要使用Pandas来在我找到元素的列上进行连接... - user3264659

1
你可以这样做:

def in_list(list_of_lists, item):
    for list_ in list_of_lists:
        if item in list_:
            return list_

编辑:

这是一个递归版本,仅供参考:

def in_list(list_of_lists, item):
    if not list_of_lists:
        return None
    if item in list_of_lists[0]:
        return list_of_lists[0]
    return in_list(list_of_lists[1:], item)

有没有其他方法可以做到这一点,而不是循环遍历所有列表?我有2000个列表,每个列表中有8个元素。 - user3264659
这个算法的复杂度不是你应该担心的事情。in 不会遍历列表,因此您只需要遍历 list_of_lists。它应该不会慢。 - Bobby Russell
@user3264659:循环遍历2000个列表有什么问题? - NPE
5
@BobbyRussell “in不会遍历列表”这是错误的。item in lst是一个O(n)操作,它会遍历lst直到找到item或者lst被遍历完。 - dano
@Leistungsabfall,你的回答不是帖子作者想要的...那个理解会返回一个列表的列表。 - Bobby Russell
显示剩余2条评论

0

我遇到了类似的问题。我有一个元组列表,其中包含瓦片编号:

data = [(0, 0, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 0),
    (0, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 0),
    (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)]

我需要找出特定瓦片编号在元组列表中的位置,因此:

to_find = 42
for i in range(len(data)):
    if to_find in data[i]:
        print (i, data[i].index(to_find))
        break

0
您可以按照以下方式检查列表中是否存在一个值:

list_of_lists = [['John', 'David'], ['Anna', 'Lisa']] 

print(any('Lisa' in list for list in list_of_lists)) # True
print(any('Tom' in list for list in list_of_lists)) # False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接