【问题标题】:Created directories from two lists从两个列表创建目录
【发布时间】:2018-12-01 10:56:31
【问题描述】:

我有以下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 是完成这项任务的正确工具吗?

【问题讨论】:

标签: python for-loop itertools


【解决方案1】:

即使没有 2 个 explicit for 循环,任何解决方案(无论是排列还是其他)都会导致 implicit 循环遍历引擎盖下的两个列表。

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

您的解决方案是 (n*m) 在两个列表(nm)的长度函数中的 Big-O 表示法。这并不妨碍它在两个列表都很短(在您的示例中它们是)并且 nm 都很小的现实中具有良好的性能。

【讨论】:

  • 只是为了学习,假设配置文件列表更大,比如说200多个名字,那么应该怎么做?正如你所说,在某些时候我将在引擎盖下使用两个 for 循环。
  • @Sveta:你真的确定花时间优化磁盘上的文件是必不可少的吗?我认为专注于在算法级别或任何级别上优化此代码不是一个好主意。俗话说:过早优化是万恶之源。我想不出任何不具有n*m 复杂性的解决方案,而且我怀疑是否存在针对您提出的问题的解决方案。您是否尝试过分析您的脚本?尝试这样做并改善热点。
猜你喜欢
  • 2014-06-29
  • 2015-07-14
  • 2019-04-14
  • 1970-01-01
  • 2022-12-08
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多