1

这是针对 Python 的。我想获取一个字符串列表并将每个字符串拆分为它自己的元素,并以逗号作为分隔符。然后将其转换为子列表列表,同时将第一个元素保留为字符串,将接下来的两个元素保留为整数。我有的:

 myList = ['one, 0650 ,0730','two, 1100, 1115','three, 1210, 1250','two, 1515, 
 1530','four, 1130, 1430','five, 1750, 1930','four, 2000, 2100','three, 1800, 
 2100']

期望的输出:

newList = [['one', 0650, 0730] , ['two', 1100, 1115] , ['three', 1210, 1250] 
,['two', 1515, 1530],['four', 1130, 1430] , ['five', 1750, 1930] , ['four', 
2000, 2100] , ['three', 1800, 2100]]

我知道,如果您对每个项目应用 list func,它会将字符串格式的每个项目转换为字符串列表。问题是我需要具有不同数据类型的子列表。对不起,我确定从哪里开始。

4

3 回答 3

1

你可以这样做:

result = []
for item in myList:
    items = [sub_item.strip() for sub_item in item.split(',')]
    items = [
        int(sub_item) if sub_item.isdigit() else sub_item
        for sub_item in items
    ]
    result.append(items)

print(result) # [['one', 650, 730], ['two', 1100, 1115], ['three', 1210, 1250], ['two', 1515, 1530], ['four', 1130, 1430], ['five', 1750, 1930], ['four', 2000, 2100], ['three', 1800, 2100]]

你也可以使用正则表达式来做同样的事情

import re

pattern = r'(\w+)\s*\,\s*(\d+)\s*\,\s*(\d+)'
for item in myList:
    items = re.findall(pattern, item)[0] # it will be ['one', '650', '730']
    items = [
        int(sub_item) if sub_item.isdigit() else sub_item
        for sub_item in items
    ]
    result.append(items)

如果您需要,请在一行中:

import re

pattern = r'(\w+)\s*\,\s*(\d+)\s*\,\s*(\d+)'
result = [[int(item) if item.isdigit() else item for item in re.findall(pattern, items)[0]] for items in myList]

没有正则表达式也一样:

result = [[int(item) if item.isdigit() else item for item in items.replace(' ', '').split(',')] for items in myList]
于 2020-01-24T02:59:07.100 回答
0
newList = [e.split(",") for e in myList]
newList = [[int(x) if x.strip().isdigit() else x for x in sublst] for sublst in newList]

只是想确保myList = ['one, 0650 ,0730'...不是错字。后面有一个空格0650,其他的后面跟一个逗号,

如果这是一个错字,你可以跳过这strip()一步。

于 2020-01-24T03:52:03.020 回答
0

尝试这个。

myList = [item.split(',') for item in myList]
myList = [[i.strip() for i in item] for item in myList]
myList = [[int(i) if i.isdigit() else i for i in item] for item in myList]
print(myList) #[['one', 650, 730], ['two', 1100, 1115], ['three', 1210, 1250], ['two', 1515, 1530], ['four', 1130, 1430], ['five', 1750, 1930], ['four', 2000, 2100], ['three', 1800, 2100]]
于 2020-01-24T03:24:46.233 回答