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

时间:2014-02-17 08:07:35

标签: python list python-3.x

我有一个这样的清单:

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

我想对每个内部值执行操作 - 比如连接,转换为int和递增等等。

如何为所有列表项执行此操作;鉴于这是一个多维列表?

4 个答案:

答案 0 :(得分:4)

您可以使用list comprehensionnested list comprehension):

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

BTW,为什么要使用字符串列表?

我更喜欢使用数字列表(无需转换为int,返回str)。

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

答案 1 :(得分:1)

  >>> 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

答案 2 :(得分:0)

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

我们可以在这里使用eval功能。关于eval()What does Python's eval() do?

答案 3 :(得分:0)

如果列表理解吓到你,你可以使用子索引。例如,

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

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

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