Python 如何替换二维列表数组中出现的所有项目

Python 如何替换二维列表数组中出现的所有项目,python,Python,我有一个python列表数组: yards = [['85', '110', '90', '130', '115', '105', '95', '87', '85'], ['-', '90', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-']] 但是我想用零(0)替换所有的“-” 下面的代

我有一个python列表数组:

yards = [['85', '110', '90', '130', '115', '105', '95', '87', '85'], ['-', '90', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-'], ['-', '-', '-', '-', '-', '-', '-', '-', '-']]
但是我想用零(0)替换所有的“-”

下面的代码没有正常工作,因为它没有循环所有元素,只循环定义为yards的元素[1]。如何使具有元素('-')的2D列表数组的任何大小都变为零

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]
转换为numpy:

将numpy导入为np
码数=['85','110','90','130','115','105','95','87','85'],['-','90','-','-','-','-','-','-',['-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',','-','-','-','-','-','-','-','-','-'-','-','-','-']
arr=np.阵列(码)
然后,要将所有出现的“-”设置为0,请执行以下操作:

arr[arr=='-']=0
转换为numpy:

将numpy导入为np
码数=['85','110','90','130','115','105','95','87','85'],['-','90','-','-','-','-','-','-',['-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',','-','-','-','-','-','-','-','-','-'-','-','-','-']
arr=np.阵列(码)
然后,要将所有出现的“-”设置为0,请执行以下操作:

arr[arr=='-']=0
适用于范围内的l(长度(码)):
对于范围内的i(len(l)):
如果l[i]='-':
码[l][i]=0
这将循环遍历每个子列表,找到“-”,并将其值更改为0。

对于范围内的l(len(yards)):
对于范围内的i(len(l)):
如果l[i]='-':
码[l][i]=0

这将循环遍历每个子列表并查找“-”,并将其值更改为0。

您可以在二维列表中迭代:

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

您可以在二维列表中迭代:

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

Hendy的回答会输出以下错误:

TypeError: object of type 'int' has no len()
以下是修复此问题的方法:

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

Hendy的回答会输出以下错误:

TypeError: object of type 'int' has no len()
以下是修复此问题的方法:

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

如果您已经在使用numpy进行某些操作,那么这是一个非常简单的单行程序:

x = np.array(yards)    
np.where(x=='-',0,x).tolist()
输出:

[['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']]

您还可以使用numpy将数组类型转换为整数、浮点等。如果您想在-'被数字替换后使用,如果您已经在使用numpy进行某些操作,则这是一个非常简单的一行程序:

x = np.array(yards)    
np.where(x=='-',0,x).tolist()
输出:

[['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']]

您还可以使用numpy将数组类型转换为整数、浮点等。如果需要,可以使用嵌套列表理解将“-”转换为0(并将其他元素转换为整数):


可以使用嵌套列表理解将“-”转换为0(并将其他元素转换为整数):


这是一个嵌套列表,因此需要嵌套for循环,以循环数组中每个列表的每个元素这是一个嵌套列表,因此需要嵌套for循环,以循环数组中每个列表的每个元素!!这很有效,而且很容易阅读。谢谢Jacob K!!这很有效,而且很容易阅读。