首页 > 解决方案 > 如何替换二维列表数组中所有出现的项目

问题描述

我有这个 python 列表数组:

yards = [['85', '110', '90', '130', '115', '105', '95', '87', '85'], ['-', '90', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-']]

但我想用零(0)替换所有'-'。

yards = [[85, 110, 90, 130, 115, 105, 95, 87, 85], [0, 90, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]

下面的代码不能正常工作,因为它没有循环所有元素,只有定义为码 [1] 的元素。如何使任何大小的带有元素('-')的二维列表数组变为零?

print(len(yards))
numeric_types = [str]
yards = [x for x in yards[1] if type(x) in numeric_types]  

print(yards)

for i in range(len(yards)):
  if yards[i] == '-':
      yards[i] = 0

 print(yards) # output of the changed list


4
['-', '90', '-', '-', '-', '-', '-', '-', '-']
[0, '90', 0, 0, 0, 0, 0, 0, 0]

标签: python

解决方案


转换为 numpy:

import numpy as np

yards = [['85', '110', '90', '130', '115', '105', '95', '87', '85'], ['-', '90', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-']]
arr = np.array(yards)

然后要将所有出现的“-”设置为 0,请执行以下操作:

arr[arr == '-'] = 0

推荐阅读