从两个列表创建目录

时间:2018-06-22 02:34:30

标签: python for-loop itertools

我有以下namedtupleList

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是执行此任务的正确工具吗?

1 个答案:

答案 0 :(得分:2)

即使您在没有2个 explicit for循环的情况下走开,任何解决方案(无论是置换还是其他)也将导致隐式遍历引擎盖下的两个列表。

由于您在询问代码的性能,因此有两个角度:

  • Big-O-涉及大量输入数字的解决方案类别
  • 分析-这里的timeit库是在python(check here for usage)中对其进行度量的正确方法。

根据两个列表的长度(n*mn)的功能,您的解决方案是采用大O表示法的(m)。这并不能阻止它在两个列表都很短(在您的示例中都是)并且nm都很小的情况下具有良好的性能。