最近出现了一个奇怪的问题。我正在尝试更改已转换为列表的元组中的项目。
但我有什么,
paths = [(1,2),(2,3),(2,0)]
plist = []
for pathlist in paths:
for n in range(0, len(pathlist)):
if pathlist[n] == 2:
plist = list(pathlist)
plist[n] = 4
pathlist = tuple(plist)
print(pathlist)
print(paths)
实际上没有更改列表paths
中的值,即它保持与原始值相同,即使我可以告诉print(pathlist)
它已被正确修改。我无法删除它并追加它,因为这会抵消for循环。伙计们,感谢您的帮助。
答案 0 :(得分:1)
pathlist var是一个新实例,它不会影响路径列表成员。
试试这个:
for i in range(len(paths)):
pathlist = paths[i]
for n in range(0, len(pathlist)):
if pathlist[n] == 2:
plist = list(pathlist)
plist[n] = 4
paths[i] = tuple(plist)
print(paths[i])
答案 1 :(得分:0)
您只是更改您修改的列表副本。您没有直接修改paths
。
这样做:
>>> for i, pl in enumerate(paths):
for j, n in enumerate(pl):
if n==2:
pl = list(pl)
pl[j] = 4
paths[i] = pl
>>> paths
[[1, 4], [4, 3], [4, 0]]
答案 2 :(得分:0)
你应该在每个回合中将路径列表附加到某个列表中......尝试这个
paths = [(1,2),(2,3),(2,0)]
flist = []
for pathlist in paths:
for n in range(0, len(pathlist)):
if pathlist[n] == 2:
plist = list(pathlist)
plist[n] = 4
pathlist = tuple(plist)
flist.append(pathlist)
print(flist)
输出将是
[(1, 4), (4, 3), (4, 0)]
答案 3 :(得分:0)
虽然最初pathlist
指向path
的元素,但在循环中重新分配该链接时会丢失。
for pathlist in paths:
...
pathlist = 'new value'
使用整数列表尝试这种更简单的情况。 alist
未被更改。
alist = [1,2,3]
for x in alist:
x = x*2
但如果元素是列表,则可以在不丢失alist
链接的情况下对其进行更改。
alist = [[1],[2],[3]]
for x in alist:
x[0] = x[0]*2
不幸的是,出于这些目的,你的元组更像是整数而不是列表。您必须使用索引来修改alist[i]
,或者像列表推导答案中那样重建列表。