如何在Python中对2D列表的所有值执行操作

How to perform an operation on all values of a 2D list in Python

我有一个这样的清单:

1
counters = [["0"],["0"],["0"],["0"]]

我想对每个内部值执行一个操作,比如串联、转换为int和递增等。

如果这是一个多维的列表,那么如何对所有列表项执行此操作?


可以使用列表理解(嵌套列表理解):

1
2
3
>>> counters = [["0"],["0"],["0"],["0"]]
>>> [[str(int(c)+1) for c in cs] for cs in counters]
[['1'], ['1'], ['1'], ['1']]

顺便问一下,为什么要使用字符串列表?

我宁愿使用一个数字列表(不需要转换成int,返回str)。

1
2
3
>>> counters = [0, 0, 0, 0]
>>> [c+1 for c in counters]
[1, 1, 1, 1]


1
2
3
4
5
6
7
  >>> counter=['0']*10
  >>> counter
   ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
  >>> counter=['1']*10
  >>> counter
  ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']
  overwrite a counter with 1,s


如果列表理解让你感到害怕,你可以使用子索引。例如,

1
2
for i in range(len(counters)):
    counters[i][0] = str(eval(counters[i][0]) + 1)

counters是一个列表列表,因此在添加到子索引0(第一项)之前需要访问它。例如,counters[0][0]是第一个子列表中的第一项。

此外,每个子项都是一个字符串,而不是整数或浮点。eval函数进行适当的转换,以便我们可以添加1,外部str函数将最终答案转换回字符串。


1
2
3
4
>>> counters = [["0"],["0"],["0"],["0"]]
>>> counters = [ [str(eval(i[0])+1)] for element in counters ]
>>> counters
[['1'], ['1'], ['1'], ['1']]

我们可以在这里使用eval函数。关于eval()python的eval()做什么?