Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:can';t convert";无”;或列表中的空字符串值_Python_List - Fatal编程技术网

Python:can';t convert";无”;或列表中的空字符串值

Python:can';t convert";无”;或列表中的空字符串值,python,list,Python,List,我有一个叫做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

我有一个叫做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]))
结果是完全一样的。你知道我做错了什么吗?

你可以在这里使用嵌套列表理解。假设您的列表存储在变量中为
my_list
,do

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]

代码的问题在第二行。您正在主列表的长度上循环

将其更改为:

for j in range(1, len(query1[i])):
它应该会起作用。此外,最好使用简单的if语句检查值:

if query[i][j] in (None, ''):
    query[i][j] = 0

您也可以使用列表理解,但它更高级,需要一些时间才能习惯。

列表中有一个列表,因此您必须迭代这两个列表:

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)

所以,从列表中删除空值(无、、、等)的最具python风格的方法是过滤它:

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循环中使用filter(或使用理解列表)

太多数据。将它减少到显示问题的最小子集,就像您陷入了使代码变得不必要的复杂。另外,作为一般规则,如果您发现自己对范围内的i使用
(len(x)):
,如果您将其替换为枚举(x)中的i、elem的
,那么您的代码可能会更干净。您的变量名有一个输入错误。还要注意,这会将
Decimal('0')
更改为
0
。这并不完全正确,因为Decimal('0')的计算结果为False。如果项目为“无”或项目为“谢谢大家的评论”,请执行此操作。更新了答案我猜
或十进制('0')
会更有意义。天哪,我怎么可能没有注意到呢?非常感谢你,你比我快:)为什么不干脆
range(len(query1[i])
尽管如此?@JulienMarrec我认为这是故意的,因为第一个元素是一些“PD”国家/地区代码标签。当然,如果你愿意,你可以从一开始就循环。确切地说,第一个元素不是相关的好点!太多的数据,我看不出两个子列表都是这样!这将起作用,因为你只是在设置没有c的项目挂名单。