我有两个列表:
a=[[10, 0], [12,1], [13, 8], [2, -3]]
b=[1, 2, -30, 404]
我想用
a[*][1]
中的值替换 b
值,这样我的结果看起来像:[[10, 1], [12, 2], [13, -30], [2, 404]]
一个明显的方式(对我来说,是一个真正的 C 程序员)是这样的:
for i in range(len(a)):
a[i][1]=b[i]
但不知何故,这感觉不是很pythonic。
我将如何以 Pythonic 的方式做到这一点?
此外,
b
-list 可以比 a
具有更多或更少的元素。如果较少,a
中的剩余元素应保持不变。a=[[10, 0], [12,1], [13, 8], [2, -3]]
b=[10, 20]
result=[[10, 10], [12,20], [13, 8], [2, -3]]
如果它们更多,我想添加带有默认第一个元素的新条目(例如
None
)a=[[10, 0], [12,1]]
b=[100, 200, -30, 404]
result=[[10, 100], [12,200], [None, -30], [None, 404]]
这可以通过列表理解来实现吗?
最佳答案
enumerate
通常被认为是在列表索引范围内循环的 Pythonic 替代方案。除此之外,您的解决方案真的没有什么特别之处。
for i, v in enumerate(b):
try:
a[i][1] = v
except IndexError:
a.append([None, v])
或者,使用迭代器来避免多个 try/catch 触发器:
bnumer = enumerate(b)
for i, v in bnumer:
try:
a[i][1] = v
except IndexError:
break
# extend the list with the remaining default values from b
a.extend([None,v] for v in bnumer)
关于python - 用其他数组填充二维数组的一维,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19141905/