Python列表中有效的元素查找方式?

时间:2010-11-03 14:31:22

标签: python arrays list lookup traversal

我有一个目录中的文件列表。我只需要处理该目录中的某些文件。 filelist是我想要的文件列表。我该如何实现这一目标?对bash解决方案不感兴趣,因为我必须在这个Python脚本中完成所有操作。非常感谢!

for record in result:
    filelist.append(record[0])

print filelist


for file in os.listdir(sys.argv[1].strip() + "/"):
    for file in filelist: #This doesn't work, how else do I do this? If file equals to my desired file-list, then do something.
        print file

对不起伙计们,不知道我是怎么错过这个的!清晨编码我猜!! Mods,请关闭它,除非有人想以有效的方式进行操作。

for file in os.listdir(sys.argv[1].strip() + "/"):
    if file in filelist:
        print file

4 个答案:

答案 0 :(得分:3)

听起来你想做一个测试:

for file in os.listdir(sys.argv[1].strip() + "/"):
    if file in filelist:
        # Found a file in the wanted-list.
        print file

答案 1 :(得分:3)

如果顺序和唯一性无关紧要,您可以使用set交叉点,效率会更高。

import set
os_list = os.listdir(sys.argv[1].strip() + "/")
for file in set(os_list) & set(filelist):
    #...

改进的例子:

import random
import timeit

l = [random.randint(1,10000) for i in range(1000)]
l2 = [random.randint(1,10000) for i in range(1000)]

def f1():
    l3 = []
    for i in l:
        if i in l2:
            l3.append(i)
    return l3

def f2():
    l3 = []
    for i in set(l) & set(l2):
        l3.append(i)
    return l3

t1 = timeit.Timer('f1()', 'from __main__ import f1')
print t1.timeit(100) #2.0850549985

t2 = timeit.Timer('f2()', 'from __main__ import f2')
print t2.timeit(100) #0.0162533142857

答案 2 :(得分:1)

看起来你只想做这样的事情:

for file in os.listdir(sys.argv[1].strip() + "/"): 
    if file in filelist:
        print file 

请注意,我刚刚将第二个for更改为if。但是,由于您询问的是效率问题,因此您可能希望将filelistlist更改为setdict来制作in操作员更有效率。

答案 3 :(得分:1)

这样的事情:

print [x for x in os.listdir(sys.argv[1].strip() + "/") if x in filelist]