Python +;的操作数类型不受支持:';int';和';列表';
我试图在这个python程序中读取csv文件作为列表。文件test.csv只包含一行不同的数字。我想找到总和等于500的数字的可能组合,在得到列表输出后,python程序将把这个列表附加到我的test.csv文件中 csv_file.pyPython +;的操作数类型不受支持:';int';和';列表';,python,csv,Python,Csv,我试图在这个python程序中读取csv文件作为列表。文件test.csv只包含一行不同的数字。我想找到总和等于500的数字的可能组合,在得到列表输出后,python程序将把这个列表附加到我的test.csv文件中 csv_file.py import sys import csv import os file_name="test.csv" path1 = "C:\MAYANK\python p" path2 = os.path.join(path1, file_name) with op
import sys
import csv
import os
file_name="test.csv"
path1 = "C:\MAYANK\python p"
path2 = os.path.join(path1, file_name)
with open(path2, 'r') as csv_file:
reader = csv.reader(csv_file, delimiter=",")
row1 = list(reader)
def subset_sum(numbers, target, partial=list()):
s = sum(partial)
# check if the partial sum is equals to target
if s == target:
with open(path2, 'a') as csv_file1:
writer = csv.writer(csv_file1)
writer.writerow(partial)
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i + 1:]
subset_sum(remaining, target, partial + [n])
if __name__ == '__main__':
subset_sum(row1, 500)
我已编写了所有代码,但出现以下错误:
Traceback (most recent call last):
File "csv_file.py", line 33, in <module>
subset_sum(row1, 500)
File "csv_file.py", line 30, in subset_sum
subset_sum(remaining, target, partial + [n])
File "csv_file.py", line 17, in subset_sum
s = sum(partial)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
回溯(最近一次呼叫最后一次):
文件“csv_File.py”,第33行,在
子集和(第1500行)
文件“csv_File.py”,第30行,在子集_sum中
子集_和(剩余、目标、部分+[n])
文件“csv_File.py”,第17行,在子集_sum中
s=总和(部分)
TypeError:不支持+:“int”和“list”的操作数类型
您的输入/导入方式是您的问题:
>>> subset_sum([111,222,333,444,555, 499, 1, 389, 20, 369], 500)
[111, 389]
[111, 20, 369]
[499, 1]
工作,而:
>>> subset_sum([111,222,333,444,555, [499], 1, 389, 20, 369], 500)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
没有
读取器
必须是一个嵌套列表,然后该列表将求和([[])
给出类型错误:不支持+:'int'和'list'的操作数类型
修复输入后,您可能会
TypeError: unsupported operand type(s) for +: 'int' and 'str'
这意味着您需要将该列表映射到ints。要解决此问题,请将list()
调用替换为map(int,)
:
您的输入/导入方式是您的问题:
>>> subset_sum([111,222,333,444,555, 499, 1, 389, 20, 369], 500)
[111, 389]
[111, 20, 369]
[499, 1]
工作,而:
>>> subset_sum([111,222,333,444,555, [499], 1, 389, 20, 369], 500)
TypeError: unsupported operand type(s) for +: 'int' and 'list'
没有
读取器
必须是一个嵌套列表,然后该列表将求和([[])
给出类型错误:不支持+:'int'和'list'的操作数类型
修复输入后,您可能会
TypeError: unsupported operand type(s) for +: 'int' and 'str'
这意味着您需要将该列表映射到ints。要解决此问题,请将list()
调用替换为map(int,)
:
list(reader)
提供一个行列表,其中每一行都是字符串列表。换句话说,您的row1
是一个列表列表,而不是一个数字列表,这就是为什么sum()
抛出特定异常的原因
您将其命名为row1
表明您只对第一行感兴趣。如果是这样的话,那么实际上您的意思是说row1=list(reader)[0]
,这将为您提供一个sum()
可以处理的列表。但要注意,如果这样做,您将无法访问表的其余部分
第二个问题是,您需要将单个条目从字符串转换为数字,否则您将无法从sum()
中获得预期的结果
要在将表从字符串转换为数字时保留整个表,可以执行以下操作:
with open(path2, 'r') as csv_file:
reader = csv.reader(csv_file, delimiter=",")
table = [[float(x) for x in row] for row in reader]
row1 = table[0]
然后像以前一样继续。list(reader)
提供一个行列表,其中每一行都是字符串列表。换句话说,您的row1
是一个列表列表,而不是一个数字列表,这就是为什么sum()
抛出特定异常的原因
您将其命名为row1
表明您只对第一行感兴趣。如果是这样的话,那么实际上您的意思是说row1=list(reader)[0]
,这将为您提供一个sum()
可以处理的列表。但要注意,如果这样做,您将无法访问表的其余部分
第二个问题是,您需要将单个条目从字符串转换为数字,否则您将无法从sum()
中获得预期的结果
要在将表从字符串转换为数字时保留整个表,可以执行以下操作:
with open(path2, 'r') as csv_file:
reader = csv.reader(csv_file, delimiter=",")
table = [[float(x) for x in row] for row in reader]
row1 = table[0]
然后像以前一样继续。此函数在有效输入上运行良好,因此无法正确输入该输入。此函数在有效输入上运行良好,因此无法正确输入该输入。
list(已经是列表的内容)
不会增加嵌套,它只是将列表内容复制到一个新容器中。我认为问题在于,reader
已经是一个嵌套序列,甚至在list(reader)
之前。这反过来意味着你不能直接map(int,…)
它。@jez我在你修改输入后提到过。在不知道csv文件是什么样子的情况下,我们只能猜测如何最好地修复它。我通过reader1=list(reader)[0]
修复了我的输入,这向我显示了错误TypeError:不支持+:'int'和'str'的操作数类型。
之后我使用了row1=map(int,reader1)
但这给了我另一个错误,类型为“map”的对象没有len()
@MayankJain编辑您的帖子并添加带有更改的代码。此外,当您遇到这样的错误时,它会帮助您包含发生错误的行。list(已经是列表的东西)
不会增加嵌套,它只是将列表内容复制到一个新容器中。我认为问题在于,reader
已经是一个嵌套序列,甚至在list(reader)
之前。这反过来意味着你不能直接map(int,…)
它。@jez我在你修改输入后提到过。在不知道csv文件是什么样子的情况下,我们只能猜测如何最好地修复它。我通过reader1=list(reader)[0]
修复了我的输入,这向我显示了错误TypeError:不支持+:'int'和'str'的操作数类型。
之后我使用了row1=map(int,reader1)
但这给了我另一个错误,类型为“map”的对象没有len()
@MayankJain编辑您的帖子并添加带有更改的代码。此外,当您遇到这样的错误时,包含发生错误的行也会有帮助。我使用了您的代码,但它给了我错误无法将字符串转换为浮点:
。我的csv文件包含以逗号分隔的各种数字,如100200300400200,40,30440899344440100100
使用命令行中的列表理解版本,如果出现此错误,请询问它x
是什么。它将是无法转换为浮点的。围绕这一点进行规划。您可能需要自己编写