将元组中的元素更改为 Python 中的列表

Changing elements in a tuple converted to list in Python

在 Python 代码中,我有一个这样的元组列表:

file1 = [[('a', -1), ('b', -1), ('c', -1)], [('a', -1), ('b', -1), ('c', 0)], [('a', -1), ('b', -1), ('c', 1)], [('a', 0), ('b', -1), ('c', 1)]] 

这是一个包含 51 个项目的列表。我必须将所有的 '-1' 更改为 '0',只要我更改它,我就必须为每个更改创建一个新的元组。例如:第一个元组:[('a', -1), ('b', -1), ('c', -1)] 应该生成三个不同的元组,例如: (1) [('a', 0), ('b', -1), ('c', -1)], [('a', -1), ('b', 0), ('c', -1)] and (3) [('a', -1), ('b', -1), ('c', 0)].

我尝试将所有元组转换为列表,但它不起作用。我也试过了

for i in file1:
    i = list(i)
    for j in i:
        j = list(j)
        if j[1] == -1:
            j = (j[0],0)
            file2.append(i) 

如何解决?它没有改变任何项目。

from copy import deepcopy

# somewhere to save results
file2 = []

# loop the outer list
for inner_list in file1:

  # save the original (or remove, if not needed)
  file2.append(inner_list)

  # loop the individual tuples
  for i, t in enumerate(inner_list):

    # find any -1s
    if t[1] == -1:

      # save the list, again
      file2.append(deepcopy(inner_list))

      # replace the required tuple
      file2[-1][i] = tuple([t[0], 0])
      

它不会做任何更改,因为每次追加 i。而且您还在遍历子列表项,但实际上并没有将整个新更改的子列表存储在任何地方。相反,当您遍历子列表的项目并遇到 -1 时,创建子列表的副本,将该索引处的值更改为 0 并将此新副本附加到结果。

file1 = [[('a', -1), ('b', -1), ('c', -1)], [('a', -1), ('b', -1), ('c', 0)], [('a', -1), ('b', -1), ('c', 1)], [('a', 0), ('b', -1), ('c', 1)]]

file2 = []
for items in file1:
    for i, (_, value) in enumerate(items):
        if value == -1:
            tmp = items.copy()
            tmp[i] = (tmp[i][0], 0)
            file2.append(tmp)