我有一个名为query1的列表:
[['PD', '', '', '', None, None, None, Decimal('43194'), Decimal('0'), Decimal('1000'), Decimal('500'), Decimal('67300'), Decimal('500'), Decimal('24426'), Decimal('2400'), Decimal('109700'), Decimal('1895'), Decimal('34000'), Decimal('100000'), None, None, Decimal('7900'), Decimal('1594'), None, None, Decimal('45900'), Decimal('12500'), None, Decimal('430'), Decimal('4550'), None, Decimal('11000'), Decimal('33700'), None, Decimal('10100'), Decimal('13500'), None, None, None, Decimal('96282'), Decimal('1000'), Decimal('2450'), Decimal('3700'), Decimal('19657'), Decimal('190700'), Decimal('7200'), Decimal('0'), Decimal('34650'), None, None, Decimal('1070'), None, Decimal('23200'), Decimal('200'), None, None, Decimal('42200'), Decimal('0'), Decimal('2000'), Decimal('7058'), None, Decimal('0'), None, None, None, Decimal('39900'), None, Decimal('21250'), Decimal('500'), Decimal('2000'), None, Decimal('4000'), Decimal('0'), Decimal('21900'), Decimal('349950'), Decimal('1200'), None], ['VE', '', '', '', None, None, None, Decimal('20700'), Decimal('0'), None, None, Decimal('65000'), Decimal('9300'), Decimal('8920'), Decimal('200'), Decimal('26500'), Decimal('2000'), Decimal('10850'), Decimal('73000'), None, None, Decimal('3000'), None, None, None, Decimal('11700'), Decimal('6000'), None, None, None, None, Decimal('500'), Decimal('300'), None, Decimal('1000'), Decimal('20000'), None, None, None, Decimal('7000'), None, Decimal('0'), Decimal('26500'), Decimal('5300'), Decimal('7000'), Decimal('3500'), None, Decimal('15000'), None, None, None, None, Decimal('13000'), Decimal('1000'), None, None, Decimal('19400'), Decimal('0'), None, Decimal('9900'), None, None, None, None, None, Decimal('32000'), None, Decimal('3000'), None, None, None, Decimal('3000'), Decimal('0'), Decimal('2000'), Decimal('18300'), None, None]]
我想将所有None和''值更改为零,但是当我尝试这段代码时:
for i in range(len(query1)):
for j in range(1, len(query1)):
try:
int(query1[i][j]) > 0
except ValueError:
query1[i][j] = 0
print(query1)
这是我得到的结果:
[['PD', 0, '', '', None, None, None, Decimal('43194'), Decimal('0'), Decimal('1000'), Decimal('500'), Decimal('67300'), Decimal('500'), Decimal('24426'), Decimal('2400'), Decimal('109700'), Decimal('1895'), Decimal('34000'), Decimal('100000'), None, None, Decimal('7900'), Decimal('1594'), None, None, Decimal('45900'), Decimal('12500'), None, Decimal('430'), Decimal('4550'), None, Decimal('11000'), Decimal('33700'), None, Decimal('10100'), Decimal('13500'), None, None, None, Decimal('96282'), Decimal('1000'), Decimal('2450'), Decimal('3700'), Decimal('19657'), Decimal('190700'), Decimal('7200'), Decimal('0'), Decimal('34650'), None, None, Decimal('1070'), None, Decimal('23200'), Decimal('200'), None, None, Decimal('42200'), Decimal('0'), Decimal('2000'), Decimal('7058'), None, Decimal('0'), None, None, None, Decimal('39900'), None, Decimal('21250'), Decimal('500'), Decimal('2000'), None, Decimal('4000'), Decimal('0'), Decimal('21900'), Decimal('349950'), Decimal('1200'), None], ['VE', 0, '', '', None, None, None, Decimal('20700'), Decimal('0'), None, None, Decimal('65000'), Decimal('9300'), Decimal('8920'), Decimal('200'), Decimal('26500'), Decimal('2000'), Decimal('10850'), Decimal('73000'), None, None, Decimal('3000'), None, None, None, Decimal('11700'), Decimal('6000'), None, None, None, None, Decimal('500'), Decimal('300'), None, Decimal('1000'), Decimal('20000'), None, None, None, Decimal('7000'), None, Decimal('0'), Decimal('26500'), Decimal('5300'), Decimal('7000'), Decimal('3500'), None, Decimal('15000'), None, None, None, None, Decimal('13000'), Decimal('1000'), None, None, Decimal('19400'), Decimal('0'), None, Decimal('9900'), None, None, None, None, None, Decimal('32000'), None, Decimal('3000'), None, None, None, Decimal('3000'), Decimal('0'), Decimal('2000'), Decimal('18300'), None, None]]
我也尝试过:
for i in range(len(query1)):
for j in range(1, len(query1)):
if query1[i][j] is None or query[i][j] == 'None' or type(query[i][j]) is None or query1[i][j] == '':
query[i][j] = 0
else:
query[i][j] = int(str(query[i][j]))
结果完全一样。关于我做错了什么想法?
答案 0 :(得分:2)
您可以在此处使用嵌套的列表理解。假设您的列表存储在变量my_list
中,请执行
my_list = [[0 if item in [None, ''] else item for item in sub_list] for sub_list in my_list]
如果可以Decimal('0')
,而不是0
。你可能会这样做:
my_list = [[item or Decimal('0') for item in sub_list] for sub_list in my_list]
答案 1 :(得分:2)
您的代码问题出在第二行。你循环遍历主列表。
将其更改为:
for j in range(1, len(query1[i])):
它应该有效。最好用简单的if语句检查值:
if query[i][j] in (None, ''):
query[i][j] = 0
你也可以使用列表理解,但它更高级,你需要一些时间来适应它。
答案 2 :(得分:2)
列表中有一个列表,因此您必须遍历这两个列表:
new_list = []
for outer_list_item in query1:
temp_list = []
for inner_list_item in outer_list_item:
if inner_list_item in (None, ''):
temp_list.append(0)
else:
temp_list.append(inner_list_item)
new_list.append(temp_list)
答案 3 :(得分:1)
因此,从列表中删除空值(无,''等)的最Pythonic方法是过滤它:
test_list = ['something', None, '', False, 25, [1,2,3,4], (2,3)]
filtered_list = filter(None, test_list)
print filtered_list
['something', 25, [1, 2, 3, 4], (2, 3)]
如果你有一个列表列表,你可以在一个for循环中使用过滤器(或使用一个理解列表)