我一直在尝试在python列表中添加一些数据。我实际上将数据作为列表存储在列表中。现在,数据不会以索引方式出现。
要解释一下,我可以说我有一个列表'a'。现在我在a[2]
之前有a[1]
的数据。 a[1]
和a[2]
都是列表本身。现在,显然我在分配a[2]
之前无法为a[1]
分配任何内容。我不知道会有多少名单。我的意思是,这应该是动态的。
对此有任何解决方案,以便我可以成功构建列表吗?
答案 0 :(得分:7)
您可以附加空列表,直到您有足够的权限访问您拥有以下数据的索引:
while len(outerlist) <= idx:
outerlist.append([])
但是,您可能希望使用字典,而是让您实现稀疏对象。 collections.defaultdict()
object在这里特别有用:
from collections import defaultdict
data = defaultdict(list)
data[2].append(3)
data[5].append(42)
data
现在有密钥2
和5
,每个密钥都包含一个元素。目前尚无0
,1
,3
或4
条目。
答案 1 :(得分:3)
我遇到了同样的问题,用一定数量的列表填充空列表。 这是我的出路 我做了一个&#34;董事会&#34; 6x6充满O,只是为了瞬间:
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']]
答案 2 :(得分: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]]
答案 3 :(得分:1)
我认为此解决方案可以解决您的问题。
创建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]]
答案 4 :(得分: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]
答案 5 :(得分: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)