Python: How to initialize a nested list with empty values which i can append to(如何使用空值初始化嵌套列表,我可以将其追加到该列表中)
本文介绍了如何使用空值初始化嵌套列表,我可以将其追加到该列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在学习蟒蛇,结果撞到了墙上。 我正在尝试定义一个2D列表,稍后我可以使用它来附加值。这与宽*高的网格相对应
我尝试使用[]来初始化空列表,但随后忽略了wid。 我尝试使用None作为占位符,但无法追加
wid = 3
hgt = 3
l1 = [[]*wid ] * hgt
l = [[None]*wid ] * hgt
l[1][1].append("something")
结果
l1: [[], [], []]
l: [[None, None, None], [None, None, None], [None, None, None]]
错误:
append: AttributeError: 'NoneType' object has no attribute 'append'
预期结果:[[[], [], []], [[], [], []], [[], [], []]]
推荐答案
尝试在列表理解中使用列表理解:
>>> [ [ [] for i in range(wid) ] for i in range(hgt) ]
[[[], [], []], [[], [], []], [[], [], []]]
注意:这比列表乘法更可取,因为这些列表中的每个列表都是唯一的。比较:
>>> x = [ [[] for i in range(wid)] for i in range(hgt) ]
>>> x[1][1].append('a')
>>> x
[[[], [], []], [[], ['a'], []], [[], [], []]]
与
>>> y = [ [[]] * wid for i in range(hgt) ]
>>> y[1][1].append('a')
>>> y
[[[], [], []], [['a'], ['a'], ['a']], [[], [], []]]
与
>>> z = [ [[]] * wid ] * hgt
>>> z[1][1].append('a')
>>> z
[[['a'], ['a'], ['a']], [['a'], ['a'], ['a']], [['a'], ['a'], ['a']]]
其中,在第二和第三种情况下,‘a’出现在多个单元格中!使用None
并不能避免此问题:
>>> m = [ [None] * wid ] * hgt
>>> m
[[None, None, None], [None, None, None], [None, None, None]]
>>> if m[1][1] is None:
... m[1][1] = ['a']
... else:
... m[1][1].append('a')
...
>>> m
[[None, ['a'], None], [None, ['a'], None], [None, ['a'], None]]
tl;dr-使用双重列表理解。在我看来,无论如何,这是最具可读性的选项。
这篇关于如何使用空值初始化嵌套列表,我可以将其追加到该列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何使用空值初始化嵌套列表,我可以将其追加到该列表中


猜你喜欢
- 我如何卸载 PyTorch? 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01