Python:替换转换为List的元组中的项目

时间:2013-12-11 02:54:51

标签: python list tuples

最近出现了一个奇怪的问题。我正在尝试更改已转换为列表的元组中的项目。

但我有什么,

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循环。伙计们,感谢您的帮助。

4 个答案:

答案 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],或者像列表推导答案中那样重建列表。