【问题标题】:Using a nested loop to create a nested list使用嵌套循环创建嵌套列表
【发布时间】:2020-07-03 03:10:31
【问题描述】:

我想要完成的更大范围是这个。我有一个 Windows directory 可以包含可变数量的 .csv 文件。这些文件是作为 PLC 的测试结果生成的。它们通过文件名来区分。每个循环测试都会生成 2 个.csv 文件。第一个文件名包含一个订单号、一个- 分隔符和字符串UP。第二个文件是相同的,只是字符串被替换为DOWN

示例文件名:
1234567890-UP1234567890-DOWN

目录示例:
1234567890-UP.csv
1234567890-DOWN.csv
2000005001-UP.csv
2000005001-DOWN.csv

我正在尝试编写一个循环遍历目录中所有文件名并将它们存储在列表中的脚本。然后从元素中删除除订单号之外的所有内容。然后删除重复的元素。使用上面的示例目录,我将有一个类似于[1234567890,2000005001] 的列表。我已经完成了这么多。

现在我要做的是遍历文件名的原始列表并将它们与我的新列表进行比较,以创建一个嵌套列表,该列表根据它们的订单号分隔文件。使用相同的示例目录,列表将如下所示:[[1234567890-UP.csv,1234567890-DOWN.csv],[2000005001-UP.csv,2000005001-DOWN.csv]]

最后,我想遍历这个列表并根据列表索引将.csv 文件合并在一起。

可能有一种我忽略的更简单的方法可以为我省去很多麻烦。

我当前使用嵌套 for 循环填充嵌套列表的代码如下所示

    nestedlist=[]
    for x in range(len(filenamelist)):
        for y in range(len(filteredlist)):
            if filteredlist[y] in filenamelist[x]:
                nestedlist[y].append(filenamelist[x]

这会返回错误Index out of range。这是因为 nestedlist 的大小从未定义过。我不确定该怎么做或最好的方法是什么?

【问题讨论】:

  • 所以你想遍历初始列表并创建一个新的配对的嵌套列表??

标签: python list loops nested


【解决方案1】:

这可以通过更简单的方式实现。假设你有目录的文件列表 -

files = [1234567890-UP.csv,1234567890-DOWN.csv,2000005001-UP.csv,2000005001-DOWN.csv]

您可以对其进行迭代,创建订单号到实际文件名的映射。

filemap = {}
for file in files:
  order_number = re.compile('(\d*)-(\w*).csv').match(file).groups()[0]
  print(order_number)
  files = filemap.get(order_number, [])
  files.append(file)
  filemap[order_number] = files

这应该是这样的。

{'1234567890': ['1234567890-UP.csv', '1234567890-DOWN.csv'],
 '2000005001': ['2000005001-UP.csv', '2000005001-DOWN.csv']}

现在您可以查找订单号并在需要时合并

【讨论】:

  • 这解决了我的问题。也让我有机会学习正则表达式。谢谢!
【解决方案2】:

您应该直接附加到nestedlist,而不是nestedlist[y]。空列表中没有索引y

你也可以这样简化; range 是不必要的,因为您可以直接遍历列表:

nestedlist=[]
   for x in filenamelist:
      for y in filteredlist:
         if y in x:
            nestedlist.append(x)

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2019-04-22
    • 2016-05-27
    • 2013-12-14
    相关资源
    最近更新 更多