Python:遍历匹配值并更改它的列表列表

时间:2016-10-22 12:03:38

标签: python list loops

最快的方法是什么?我有一个列表列表,我必须遍历它,寻找每个子列表上的特定值。找到值后,我必须将值附加到另一个单独的列表,然后更改我找到的值。我开始这样做了

for x in f
    if 'nan' in x:
        ef.append(1.0)
    else:
        ef.append(0.0)

f是列表列表,因此我遍历每个列表x并检查子列表中元素之间是否存在nan值。如果子列表中的元素中至少有一个纳米值,则我将1.0附加到ef,但如果不存在,则附加0.0。现在我需要这样做,但同时我必须将每个子列表上的所有nan值更改为1.0。所以我想做一些像

这样的事情
for x in f:
    if 'nan' in x:
        ef.append(1.0)
        x[position of nans] = 1.0
    else:
        ef.append(0.0)

有没有办法在这个循环中执行此操作或必须重新循环?我处理的是非常大量的数据,所以我希望尽可能快地保存它。

2 个答案:

答案 0 :(得分:2)

这样的事情的复杂性是线性的,你做得不好,因为你需要至少检查一次每个元素。假设您想在每个子列表中仅在1列表中附加0ef,则此类内容将起作用:

f = [[1, 'nan'], [2, 'nan', 'nan']]
ef = []

for x in f:
    found = False
    for pos, e in enumerate(x):
        if e == 'nan':
            x[pos] = 1
            found = True
    ef.append(1 if found else 0)

print f, ef

live example on ideone here

我的笔记本电脑上的计时(包括构建列表):

$ time python test.py 
numElements = 15000000

real    0m1.908s
user    0m1.879s
sys 0m0.028s

答案 1 :(得分:0)

而不是使用list.append(),使用列表解析初始化一次更快:

ef = [[item if item != 'nan' else 1 for item in list] for list in f]

这避免了在每次插入后必须找到列表的末尾,并且更美观。