5

我一直在尝试在 python 列表中添加一些数据。我实际上是将数据作为列表存储在列表中。现在,数据不是按索引来的。

为了解释这一点,假设我有一个列表“a”。现在我有a[2]之前的数据a[1]。并且两者a[1]都是a[2]列表本身。现在,显然我不能a[2]在分配之前分配任何东西a[1]。而且我不知道会有多少列表。我的意思是,这应该是动态的。

对此有任何解决方案,以便我可以成功构建列表吗?

4

6 回答 6

10

您可以追加空列表,直到您有足够的能力访问您拥有数据的索引:

while len(outerlist) <= idx:
    outerlist.append([])

但是,您可能想改用字典,让您实现一个稀疏对象。一个collections.defaultdict()对象在这里特别有用:

from collections import defaultdict

data = defaultdict(list)

data[2].append(3)
data[5].append(42)

data现在有键25,每个都有一个元素的列表。0134尚无条目。

于 2013-09-24T11:32:46.413 回答
5

我有同样的问题,用一定数量的列表填充空列表。这是我的出路,我制作了一个充满 O 的“板”6x6,只是为了瞬间:

board = []    
for i in range(6): # create a list with nested lists
    board.append([])
    for n in range(6):
        board[i].append("O") # fills nested lists with data

结果:

[['O', 'O', 'O', 'O', 'O', 'O'],
 ['O', 'O', 'O', 'O', 'O', 'O'],
 ['O', 'O', 'O', 'O', 'O', 'O'], 
 ['O', 'O', 'O', 'O', 'O', 'O'],
 ['O', 'O', 'O', 'O', 'O', 'O'],
 ['O', 'O', 'O', 'O', 'O', 'O']]
于 2014-03-11T19:05:38.523 回答
4

我认为这个解决方案可以解决您的问题。

在 for 循环本地创建辅助列表(inside_list)

    outside_list=[]
    for i in range(0,5):
        inside_list=[]
        inside_list.append(i)
        inside_list.append(i+1)
        outside_list.append(inside_list)

       #you can access any inside_list from the outside_list and append     
        outside_list[1].append(100)
        print(outside_list)

输出:

[[0, 1], [1, 2, 100], [2, 3], [3, 4], [4, 5]]
于 2017-06-03T05:29:40.520 回答
2

你可以做到,添加元素没有问题。

>>> a = [[1,2,3], [10,20,30], [100,200,300]]
>>> a[2].append(400)
 [[1, 2, 3], [10, 20, 30], [100, 200, 300, 400]]
>>> a[1].append(40)
 [[1, 2, 3], [10, 20, 30, 40], [100, 200, 300, 400]]
于 2013-09-24T11:32:25.803 回答
0

我们可以使用列表中的第一项作为索引,然后使用它在运行时使用列表向它添加正确的值。

def unclean_(index, val, unclean=None):
   is_added = False
   if unclean is None:
       unclean = []
   length = len(unclean)
   if length == 0:
       unclean.append([index, val])
   else:
       for x in range(length):
            if unclean[x][0] == index:
                unclean[x].append(val)
                is_added = True
       if not is_added:
            unclean.append([index, val])

def terminate_even(x):
    if x % 2 == 0:
        raise Exception("Its even number")

def terminate_odd(x):
    if x % 2 != 0:
        raise Exception("Its odd number")

def fun():
    unclean = []
    for x in range(10):
       try:
            terminate_even(x)
       except:
            unclean_("terminate_even", x, unclean)

    for x in range(10):
       try:
            terminate_odd(x)
       except:
            unclean_("terminate_odd", x, unclean)

    for y in unclean:
        print y

 def main():
    fun()

 if __name__ == "__main__":
    main()

 Output:
 -------
     ['terminate_even', 0, 2, 4, 6, 8]
     ['terminate_odd', 1, 3, 5, 7, 9]
于 2017-01-30T06:29:55.710 回答
0

简单地

我会让它变得尽可能简单,不需要花哨的模块,

只需在文件开头创建一个空列表,然后在需要时附加该空列表,

例子

在函数 get_data 给出某个输出之前,在列表中添加空列表。

#/usr/bin/python3
#coding:utf-8
empty_list = []
r = ''
def get_data():
    # does something here and gives the output
    return output
imp_list = []
while r == %something%:
    r = get_data()
    imp_list.append(empty_list)

于 2020-08-31T19:27:49.837 回答