python-3.x - 将一个长字符串分解为多个列表
问题描述
有没有一种简单的方法可以将此字符串分解为 Python 中的多个列表,以便我可以使用这些列表创建一个数据框?
1|米拉祖尔|法国芒通|2|诺马|丹麦哥本哈根|3|Asador Etxebarri|西班牙阿克斯佩|4|加根|泰国曼谷|5|天竺葵|丹麦哥本哈根|6|中部|秘鲁利马|7 |Mugaritz|西班牙圣塞巴斯蒂安|8|Arpège|法国巴黎|9|Disfrutar|西班牙巴塞罗那|10|梅多|秘鲁利马|11|登|日本东京
我想分解它,使它看起来像:
[1, Mirazur, Menton, France]
[2, Noma, Copenhagen, Denmark]
and so on so forth.
我对这一切都很陌生,所以任何建议都非常感谢。更简单的答案是可能的,而不是任何“更高级”的答案都会很好,这样我就可以首先理解更基本的概念!
解决方案
小菜一碟。基础是|
性格上的分裂;这将为您提供所有项目的平面列表。接下来,将列表拆分为固定大小的较小列表;一个经过充分研究的问题,有很多答案。我选择了https://stackoverflow.com/a/5711993/2564301,因为它不使用任何外部库并为下一步返回有用的基础:
print (zip(*[data.split('|')[i::3] for i in range(3)]))
这将返回一个zip
类型,可以看出
for item in zip(*[data.split('|')[i::3] for i in range(3)]):
print (item)
这非常接近:
('1', 'Mirazur', 'Menton, France')
('2', 'Noma', 'Copenhagen, Denmark')
('3', 'Asador Etxebarri', 'Axpe, Spain')
etc.
(如果您想知道为什么zip
需要,请打印 的结果[data.split('|')[i::3] for i in range(3)]
。)
最后一步是将每个元组转换为自己的列表。
把它放在一起:
import pprint
data = '1|Mirazur|Menton, France|2|Noma|Copenhagen, Denmark|3|Asador Etxebarri|Axpe, Spain|4|Gaggan|Bangkok, Thailand|5|Geranium|Copenhagen, Denmark|6|Central|Lima, Peru|7|Mugaritz|San Sebastián, Spain|8|Arpège|Paris, France|9|Disfrutar|Barcelona, Spain|10|Maido|Lima, Peru|11|Den|Tokyo, Japan'
data = [list(item) for item in zip(*[data.split('|')[i::3] for i in range(3)])]
pprint.pprint (data)
结果(很好的缩进礼貌pprint
):
[['1', 'Mirazur', 'Menton, France'],
['2', 'Noma', 'Copenhagen, Denmark'],
['3', 'Asador Etxebarri', 'Axpe, Spain'],
['4', 'Gaggan', 'Bangkok, Thailand'],
['5', 'Geranium', 'Copenhagen, Denmark'],
['6', 'Central', 'Lima, Peru'],
['7', 'Mugaritz', 'San Sebastián, Spain'],
['8', 'Arpège', 'Paris, France'],
['9', 'Disfrutar', 'Barcelona, Spain'],
['10', 'Maido', 'Lima, Peru'],
['11', 'Den', 'Tokyo, Japan']]