首页 > 解决方案 > 如何将列表中的字符串转换为列表,从 [[list1],[list2]....[listm]]

问题描述

我有一些数据,例如: ['6005,280', '6005,2751', '6005,260']

我想将它们转换成一个列表,如: [['6005','280'],['6005','2751'],['6005','260']]

我用

for i in range(len(mainText)):
    target_list.append(int(x) for x in mainText[i].split(','))

但是得到了一些疯狂的输出,例如:

[<generator object main.<locals>.<genexpr> at 0x000000DA61784C78>, <generator object main.<locals>.<genexpr> at 0x000000DA61784B10>, <generator object main.<locals>.<genexpr> at 0x000000DA61784CF0>]

那么正确的方法是什么?

代码:

import csv

def main():
    inputfile=open('price.csv','r')
    mainText=mainPart(inputfile)
##    print(mainText)
    target_list=[]
    for i in range(len(mainText)):
        target_list.append(int(x) for x in mainText[i].split(','))
    print(target_list)




def mainPart(file):
    ## import items with first row
    rowsWithEnter1=[row for row in file]
    ## del first row
    rowsWithEnter2=rowsWithEnter1[1:]
    rows=[]
    for i in range(len(rowsWithEnter2)):
        rows.append(rowsWithEnter2[i].strip('\n'))
    return rows

main()

标签: python

解决方案


int(x) for x in ...括号内有理解(如 )时,它被解释为生成器,这是一种特殊类型的对象,然后可以迭代以生成列表。您看到的疯狂输出是因为您实际上创建了一个生成器列表,而不是一个列表列表。要将您的理解解释为列表而不是生成器,您只需将它们放在方括号中:

for i in range(len(mainText)):
    target_list.append([int(x) for x in mainText[i].split(',')])

推荐阅读