Python +;的操作数类型不受支持:';int';和';列表';

Python +;的操作数类型不受支持:';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

我试图在这个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 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
是什么。它将是无法转换为
浮点的。围绕这一点进行规划。您可能需要自己编写