我有以下namedtuple
和List
:
from collections import namedtuple
firefoxprofile = namedtuple("Profile", ["Name", "Path", "isRelative", "Default"])
jb = firefoxprofile(Name='Jason', Path='Profiles/er5rtak4.Jason', isRelative='1', Default=None)
sr = firefoxprofile(Name='Sarah', Path='Profiles/23mvfqcj.Sarah', isRelative='1', Default=None)
files = ["places.sqlite","key4.db", "logins.json"]
firefoxlisttuple = []
firefoxlisttuple.append(jb)
firefoxlisttuple.append(sr)
我正在使用一个嵌套的for循环来创建files
List
中每个文件的路径。
示例:
for profile in firefoxlisttuple:
for file in files:
print("{0}\{1}".format(profile.Path,file))
输出:
Profiles/er5rtak4.Jason/places.sqlite
Profiles/er5rtak4.Jason/key4.db
Profiles/er5rtak4.Jason/logins.json
Profiles/23mvfqcj.Sarah/places.sqlite
Profiles/23mvfqcj.Sarah/key4.db
Profiles/23mvfqcj.Sarah/logins.json
我知道嵌套for
循环就形式而言不是一个好主意。我应该怎么做才能获得相同的输出?
我研究了以下链接:
Iterate over two lists with different lengths
Python merging two lists with all possible permutations
但是我不确定这是否正确。 permutations
是执行此任务的正确工具吗?
答案 0 :(得分:2)
即使您在没有2个 explicit for循环的情况下走开,任何解决方案(无论是置换还是其他)也将导致隐式遍历引擎盖下的两个列表。
由于您在询问代码的性能,因此有两个角度:
timeit
库是在python(check here for usage)中对其进行度量的正确方法。根据两个列表的长度(n*m
和n
)的功能,您的解决方案是采用大O表示法的(m
)。这并不能阻止它在两个列表都很短(在您的示例中都是)并且n
和m
都很小的情况下具有良好的性能。