Python在另一个列表中查找列表中的项目

时间:2017-05-22 16:08:37

标签: python list loops indexing match

我想查看列表中的项目是否与单独列表中的其他项目匹配。

然后我要打印匹配的项目。

currentDay

当前输出:

columns1= ['Dog', 'cat' , 'bird', 'fish']
columns2= ['Dog', 'CAT', 'bird', 'rat']

for col in columns1:
    if col.upper() in [x.upper() for x in columns2]:
        print(col, 'Matches with', )
    else:
        print(col, 'DOES NOT Match With Anything')

期望的输出:

Dog Matches with
cat Matches with
bird Matches with
fish DOES NOT Match With Anything

我已尝试使用Dog Matches with Dog cat Matches with CAT bird Matches with bird fish DOES NOT Match With Anything ,但 区分大小写:

list_name.index(string_here)

我可以创建一个单独的列表来大写列表中的所有内容,但我觉得这是作弊,并且使用非常大的数据集会产生不必要的性能命中。

解决这个问题的更好方法是什么?

1 个答案:

答案 0 :(得分:4)

我认为性能提升就是在列表中搜索<​​/ strong>。这是线性搜索,它是 O(n)。如果将值存储在字典中。那么平均查找时间将是 O(1),这样会更快。此外,str.upper()每个项目只会被称为一次

所以你先准备一本字典:

lookup = {k.upper():k for k in columns2}

接下来我们可以使用:

for col in columns1:
    result = lookup.get(col.upper())
    if result is not None:
        print(col, 'Matches with', result )
    else:
        print(col, 'DOES NOT Match With')

lookup.get(..)方法将查找字典中是否有col.upper()(请注意字典中的键也是大写的)。如果它在字典中result将是columns2的相应原始值。如果不是,则会返回None。因此,我们只需要检查None以确定查找是否成功。

这会产生:

Dog Matches with Dog
cat Matches with CAT
bird Matches with bird
fish DOES NOT Match With