Python 在列表理解中将字符串转换为整数
我正在尝试编写一个函数,它获取文件并用新行拆分它,然后使用逗号分隔符(,)再次拆分它,之后我只想使用列表理解将列表中的每个字符串转换为整数Python 在列表理解中将字符串转换为整数,python,python-3.x,list,Python,Python 3.x,List,我正在尝试编写一个函数,它获取文件并用新行拆分它,然后使用逗号分隔符(,)再次拆分它,之后我只想使用列表理解将列表中的每个字符串转换为整数 # My code but it's not converting the splitted list into integers. def read_csv(filename): string_list = open(filename, "r").read().split('\n') string_list = string_list[1:
# My code but it's not converting the splitted list into integers.
def read_csv(filename):
string_list = open(filename, "r").read().split('\n')
string_list = string_list[1:len(string_list)]
splitted = [i.split(",") for i in string_list]
final_list = [int(i) for i in splitted]
return final_list
read_csv("US_births_1994-2003_CDC_NCHS.csv")
Output:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
使用逗号分隔符(,)拆分后数据的外观
如何将此输出中的每个字符串转换为整数,并使用列表理解将其分配给单个列表str.split()
生成一个新列表;因此,splitted
是一个列表列表。您希望转换每个包含列表的内容:
[[int(v) for v in row] for row in splitted]
演示:
请注意,您也可以直接在文件上循环以获得单独的行:
string_list = [line.strip().split(',') for line in openfileobject]
可以使用next(iterableobject,None)
跳过这样一个对象中的条目
与其将整个文件读入内存并手动拆分数据,您只需使用:
上面是一个生成器函数,在循环时一次生成一行:
for row in read_csv("US_births_1994-2003_CDC_NCHS.csv"):
print(row)
您仍然可以使用列表(读取“\u csv”(“US\u Barties\u 1994-2003\u CDC\u NCHS.csv”))获取包含所有行的列表。
str.split()
生成一个新列表;因此,splitted
是一个列表列表。您希望转换每个包含列表的内容:
[[int(v) for v in row] for row in splitted]
演示:
请注意,您也可以直接在文件上循环以获得单独的行:
string_list = [line.strip().split(',') for line in openfileobject]
可以使用next(iterableobject,None)
跳过这样一个对象中的条目
与其将整个文件读入内存并手动拆分数据,您只需使用:
上面是一个生成器函数,在循环时一次生成一行:
for row in read_csv("US_births_1994-2003_CDC_NCHS.csv"):
print(row)
您仍然可以使用
列表(读取“\u csv”(“US\u Barties\u 1994-2003\u CDC\u NCHS.csv”)
从使用csv
模块开始,不要在分隔符上重新发明拆分文件splitted
是一个列表列表,您希望转换其中包含的每个列表。是否可以不使用csv模块,因为我是python新手,我更喜欢使用列表理解,我对csv模块了解不多;我的答案向您展示了这两个选项。从使用csv
模块开始,不要重新发明在分隔符上拆分文件splitted
是一个列表列表,您希望转换其中包含的每个列表。是否可以不使用csv模块,因为我是python新手,我更喜欢使用列表理解,我对csv模块了解不多;我的回答告诉你两种选择。你能解释一下吗?@Saikumar:不确定哪部分不清楚?嵌套列表理解将列表理解应用于拆分的中的每个列表[int(v)表示行中的v]因此这是在外部列表中迭代列表,对吗?没错,因此列表理解允许您对迭代中的每个元素执行操作:[iterable中对象的某些内容]
;这里的something
是另一个列表理解,iterable中的每个对象本身就是一个字符串列表。因此,[[int(v)表示行中的v]表示行中被拆分的]
获取被拆分的中的每个列表,将其分配给行
,然后获取列表中分配给行
的每个值,并将该值(分配给v
)转换为整数。结果列表是新列表输出中的一个对象。你能解释一下吗?@Saikumar:不确定哪部分不清楚?嵌套列表理解将列表理解应用于拆分的中的每个列表[int(v)表示行中的v]因此这是在外部列表中迭代列表,对吗?没错,因此列表理解允许您对迭代中的每个元素执行操作:[iterable中对象的某些内容]
;这里的something
是另一个列表理解,iterable中的每个对象本身就是一个字符串列表。因此,[[int(v)表示行中的v]表示行中被拆分的]
获取被拆分的中的每个列表,将其分配给行
,然后获取列表中分配给行
的每个值,并将该值(分配给v
)转换为整数。结果列表是新列表输出中的一个对象。