【问题标题】:save the output of each for loop iteration to split a nested list保存每个 for 循环迭代的输出以拆分嵌套列表
【发布时间】:2020-01-29 07:55:03
【问题描述】:

我有一个类似mylst的列表列表

[[('Salmon', 9), ('Fish&Chips', 3), ('Pasta', 8), ('Shrimp', 10)],
 [('Shrimp', 8), ('Fish&Chips', 10), ('Salmon', 9), ('Pasta', 7)],
 [('Shrimp', 10), ('Fish&Chips', 6), ('Salmon', 8), ('Pasta', 5)],
 [('Shrimp', 7), ('Pasta', 9), ('Salmon', 8), ('Fish&Chips', 8)],
 [('Fish&Chips', 10), ('Shrimp', 8), ('Salmon', 9), ('Pasta', 3)]]

如果我打印所需的索引,我可以访问子列表

mylst[0]

返回

[('Salmon', 9), ('Fish&Chips', 3), ('Pasta', 8), ('Shrimp', 10)]

但我想将每个子列表存储在一个新列表中。

因为最终我想为每个子列表提取项目(元组索引 0)和订购数量(元组索引 1)并将它们存储在两个单独的列表中。但是如果我不能拆分列表,我就不能这样做

我试图遍历主列表

newlst=[]

for sublst in mylst:
    newlst.append(sublst)

newlst=[]

for i in range(len(mylst)):
    for sublst in mylst:
        newlst.append(mylst[i])

我不确定如何从 for 循环的每次迭代中拆分然后存储多个输出。

所需的输出是将 5 个子列表作为单独的列表。例如

lst1=[('Salmon', 9), ('Fish&Chips', 3), ('Pasta', 8), ('Shrimp', 10)]

lst2 = [('Shrimp', 8), ('Fish&Chips', 10), ('Salmon', 9), ('Pasta', 7)]

等等。

注意:我的问题与one 不重复,因为我已经阅读了解决方案。我想将我的子列表存储在单独的列表中。这是不同的。

【问题讨论】:

  • 预期输出是什么?
  • 你的意思是a,b,c,d,e = mylst (顺便说一句,这是处理多个列表的非常低效的方式)
  • 既然已经有了mylst[0]mylst[1]、...,为什么还需要lst1lst2、...?那是糟糕的设计。如果 mylst 包含 1000 个子列表会怎样?拥有 lst1 ... lst1000绝对没有意义
  • 正如其他人所说,我认为 OP 应该重新评估所要求的内容是否有意义。本质上,您需要 5 个由字母标识的变量。但这就是列表的全部意义——由数字标识的 5 个变量的集合。这样方便多了。如果您真的需要字母,请使用 dict,但创建单独的变量会使使用变得更难,而不是更容易。

标签: python list for-loop tuples iteration


【解决方案1】:

如果你只是想解包列表,那么你可以按照 Chris 上面所说的做 a,b,c,d,e = mylst,但如果你想要以更有用的方式重新打包数据,那么我建议将其存储在 pandas数据框。你可以用下面的代码做到这一点

import numpy as np
import pandas as pd

my_df = pd.DataFrame(np.array(mylst).reshape(-1, 2),
    columns=['item', 'quantity']) 

【讨论】:

  • 我提供的主列表是从数据框中提取的。每个子列表是数据框中一列的一行。我想将指定列中的每一行保存到单独的列表中。
  • 就像上面的 cmets 所说,您可能需要在这里重新评估您的策略。您可以解压缩列表lst1, lst2, lst3 ... = mylst,但这是一个糟糕的设计模式。 Pandas 数据框是为处理此类数据而构建的,您可能可以使用该框架更有效地解决您的问题
  • 谢谢凯尔。我会尽力做到这一点。
【解决方案2】:

您可以使用for 循环创建一个庞大的嵌套列表,每个循环都包含所需的列表。

for each in lst:
seplist = [] #splitted list of each digit of every integer
for eachagain in str(each):
    seplist.append(integer)
nestedlist.append(seplist)

这里可以使用另一个for循环来分离和存储嵌套列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多