解析列表列表并就地操作它

2024-04-24 22:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个列表,我需要解析和操作列表的内容。子列表中有数字和单词的字符串,我想把数字变成整数。我不认为这有什么关系,但我会提到它以防万一:我的原始数据来自一个CSV,我用换行符拆分,然后用逗号再次拆分

我的代码是什么样子的:

def prep_data(data):
    list = data.split('\n') #Splits data on newline
    list = list[1:-1] #Gets rid of header and last row, which is an empty string

    prepped = []
    for x in list:
        prepped.append(x.split(','))

    for item in prepped: #Converts the item into an int if it is able to be converted
        for x in item:
            try:
                item[x] = int(item[x])
            except:
                pass
    return prepped

我试图循环通过prepped中的每个子列表,并更改其中值的类型,但似乎循环没有做任何事情,因为prep_data返回的内容与我实现for循环之前相同


Tags: inan内容列表fordatais数字
1条回答
网友
1楼 · 发布于 2024-04-24 22:15:17

我不确定您的函数,因为可能我不了解您的收入数据,但您可以尝试以下方法,因为如果您只通过,您可能会丢失字符串或奇怪的数据:

def parse_data(raw_data):
    data_lines = raw_data.split('\n') #Splits data on newline
    data_rows_without_header = data_lines[1:-1] #Gets rid of header and last row, which is an empty string

    parsed_date = []
    for raw_row in data_rows_without_header:
        splited_row = raw_line.split(',')
        parsed_row = []
        for value in splited_row:
            try:
                parsed_row.append(int(value)
            except:
                print("The value '{}' is not castable".format(value))
                parsed_row.append(value) # if cast fails, add the string as it is
        parsed_date.append(parsed_row)
    return parsed_date
网友
2楼 · 发布于 2024-04-24 22:15:17

我想我看到了问题所在,您认为python在分配任务方面比实际情况更慷慨

def prep_data(data):
list = data.split('\n') #Splits data on newline
list = list[1:-1] #Gets rid of header and last row, which is an empty string

prepped = []
for x in list:
    prepped.append(x.split(','))

for i in prepped: #Converts the item into an int if it is able to be converted
item = prepped[i]
    for x in item:
        try:
            item[x] = int(item[x])
        except:
            pass
prepped[i] = item
return prepped

我不能在我现在使用的机器上运行这个,但问题似乎是“prepped”实际上没有收到任何新的分配,您只是在更改子数组“item”中的值

相关问题 更多 >