首页 > 解决方案 > 使用迭代调用的追加列表

问题描述

我在 Python 3.6 中的代码有一个简单的问题。

我正在读取一个 csv 并将 int 值存储在一个名为 Total 的列表中。我要求 Python 用户输入一个数字 n=..(在本例中为 n=9)。我创建了 n (9) 个空列表:

for j in range (1,n+1):
    command=""
    command="list"+str(j)+"=[]

现在,我有 list1、list2、... list9

然后,我想通过从不同元素开始读取 Total 并读取每个 n (9) 元素来附加这些列表。

例如:

list1=[Tot[0],Tot[8]...] list2=[Tot[1],Tot[9],...]

为此,我想要类似的东西

for k in range (0,n):
    for a in range (0+k,len(Total),n):
        listk.append(Total[a])

我的问题在这里,Python 无法识别 listk 中的整数,例如:

list1, ... list9

有什么方法可以做到吗?也许通过使用一个类?

标签: python-3.x

解决方案


对于您的问题,我建议使用字典。字典是 python 中的一种数据结构,允许存储信息对 - 例如列表及其名称。这样,您可以创建 n 个单独的命名列表,将它们全部存储在一个字典中,并根据需要附加它们。为了从不同的索引开始,我使用了运算符。

这应该可以解决问题:

# shorthand syntax for creating a dictionary with n empty lists: list1,...,listn
    lists = {"list" + str(i + 1): [] for i in range(n)}
    for k in range(n):
        list = lists.get("list" + str(k + 1))
        for j in range(n):
            list.append(Total[(j + k) % n])

一些旁注:

看来您对 Python 语法有一些误解。当您在循环中声明变量“command”时,Python会将指针保存到堆栈内存中的特定位置。但是,您在循环中,因此在循环的每次迭代中都会覆盖“命令”,并且旧指针会丢失。

以下行:

command="list"+str(j)+"=[]

在 Python 中无效。使用方括号创建列表的语法是:

variable = [item1, item2, item3] # or variable = [] for an empty list

您不能以您尝试的方式混合字符串和列表创建。


推荐阅读