修改列表中的每个元素

Jos*_*osé 4 python list

我觉得这个问题很简单但找不到答案.
我有一个长度为2的元组列表.
我想得到一个长度为3的元组列表,其中第三个元素是对其他两个元素进行某些操作的结果.
例:

for val_1, val_2 in list_of_tuples
    #...
    #some multi line operation
    #...
    val_3 = result
    replace (val_1, val_2) by (val_1, val_2, val_3) in list
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Bha*_*Rao 8

使用列表理解.

>>> list_of_tups = [(1,2),(2,3),(3,4)]
>>> [(i,j,i+j) for i,j in list_of_tups]
[(1, 2, 3), (2, 3, 5), (3, 4, 7)]
Run Code Online (Sandbox Code Playgroud)

现在重新分配它

>>> list_of_tups = [(i,j,i+j) for i,j in list_of_tups]
Run Code Online (Sandbox Code Playgroud)

迭代时不要修改列表,因为它可能会产生一些不良影响.

  • @José您当然可以使用列表理解来执行多行操作.只需输入一个函数,然后在列表解析中调用它. (4认同)
  • 如果你真的想要替换它,请执行`list_of_tups [:] = ...` (2认同)

acu*_*ner 5

对于多行操作,这很容易。

def f(i, j):
    # math here
    # more math here
    return new_result
Run Code Online (Sandbox Code Playgroud)

进而

result = [(i, j, f(i, j)) for i, j in tuples]
Run Code Online (Sandbox Code Playgroud)


Cor*_*mer 4

你可以做类似的事情

for index, (val_1, val_2) in enumerate(list_of_tuples):
    # do stuff
    val_3 = # something
    list_of_tuples[index] = (val_1, val_2, val_3)
Run Code Online (Sandbox Code Playgroud)

  • @Kevin在这种情况下,他们既不插入也不删除元素,所以这不会导致问题。如果他们追加或弹出,那将是一个不同的故事。语句*“不,不要修改您正在迭代的内容”*在某些情况下是正确的,但这不是其中之一。 (6认同)