快速迭代元组列表

mem*_*elf 41 python

我想知道是否有更快,更省时的方法来迭代元组列表,找到正确的匹配.我所做的是:

# this is a very long list.
my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)]

# go through entire list and look for match
for j in my_list:
    if j[0] == VALUE:
        PAIR_FOUND = True
        MATCHING_VALUE = j[1]
        break
Run Code Online (Sandbox Code Playgroud)

此代码可能需要相当长的时间才能执行,具体取决于列表中的项目数.我相信有更好的方法可以做到这一点.

Eri*_*ric 57

我认为你可以使用

for j,k in my_list:
  [ ... stuff ... ]
Run Code Online (Sandbox Code Playgroud)

  • 但这不会使循环执行得更快。会吗? (2认同)

San*_*rma 23

假设更多的内存使用不是问题,如果你的元组的第一项是可以清除的,你可以从元组列表中创建一个字典,然后查找该值就像从中查找键一样简单dict.就像是:

dct = dict(tuples)
val = dct.get(key) # None if item not found else the corresponding value
Run Code Online (Sandbox Code Playgroud)

编辑:要创建反向映射,请使用以下内容:

revDct = dict((val, key) for (key, val) in tuples)
Run Code Online (Sandbox Code Playgroud)


Vai*_*ngh 5

这个问题已经死了,但仍然知道另一种方法不会有什么坏处:

my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)]

for first,*args in my_list:
    if first == Value:
        PAIR_FOUND = True
        MATCHING_VALUE = args
        break
Run Code Online (Sandbox Code Playgroud)