首页 > 解决方案 > 将一个长字符串分解为多个列表

问题描述

有没有一种简单的方法可以将此字符串分解为 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.

我对这一切都很陌生,所以任何建议都非常感谢。更简单的答案是可能的,而不是任何“更高级”的答案都会很好,这样我就可以首先理解更基本的概念!

标签: python-3.xstringdataframesplit

解决方案


小菜一碟。基础是|性格上的分裂;这将为您提供所有项目的平面列表。接下来,将列表拆分为固定大小的较小列表;一个经过充分研究的问题,有很多答案。我选择了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']]

推荐阅读