如何将一组字符串转换为python中类似[[string1,string2]]的列表?
我有多个字符串,它们总是由Beauty soup中的for循环生成 html的结构是:如何将一组字符串转换为python中类似[[string1,string2]]的列表?,python,Python,我有多个字符串,它们总是由Beauty soup中的for循环生成 html的结构是: 最新事件新预计到达时间:2017-12-19 10:00 UTC 拖船 法国国旗 表达方式是: for ids in blockinfo.find_all('ul'): for li in ids.find_all('li'): print li.text.strip() 字符串的输出如下所示: string1 string2 string3 string4 s
- 最新事件新预计到达时间:2017-12-19 10:00 UTC
- 拖船
- 法国国旗
-
表达方式是:
for ids in blockinfo.find_all('ul'):
for li in ids.find_all('li'):
print li.text.strip()
字符串的输出如下所示:
string1
string2
string3
string4
string5
string6
我需要创建如下列表:
[[string1,string2],[string3,string4][string5,string6]]
有什么帮助吗?
感谢如果您想按照
元素对字符串进行分组,请将它们附加到在每个
元素上的循环内创建的列表中,然后在每次完成包含的元素上的循环时将该列表附加到结果列表中:
results = []
for ids in blockinfo.find_all('ul'):
elements = []
for li in ids.find_all('li'):
elements.append(li.text.strip())
results.append(elements)
您也可以对该内部循环使用列表理解:
results = []
for ids in blockinfo.find_all('ul'):
results.append([
li.text.strip() for li in ids.find_all('li')])
将外部循环转换为列表也可以:
results = [
[li.text.strip() for li in ids.find_all('li')]
for ids in blockinfo.find_all('ul')]
所有三种变体产生相同的输出;从长远来看,选择最适合维护的。列表理解比var=[]快一点;对于在…:var.append(…)
循环模式中
后者的演示,使用一些模拟输入:
>>> from bs4 import BeautifulSoup
>>> blockinfo = BeautifulSoup('''
... <ul><li>string1</li><li>string2</li></ul>
... <ul><li>string3</li><li>string4</li></ul>
... <ul><li>string5</li><li>string6</li></ul>
... ''', 'lxml')
>>> [
... [li.text.strip() for li in ids.find_all('li')]
... for ids in blockinfo.find_all('ul')]
[['string1', 'string2'], ['string3', 'string4'], ['string5', 'string6']]
假设这些字符串被分组为
组,那么?@MartijnPieters是的,结构是这样的,如果您编辑您的问题以包含该结构,它会更有帮助。@MartijnPieters我不需要将字符串连接在一起。下面代码中的生成此输出:[[string1+string2,string3+string4,string5+string6]]不,它不生成此输出。如果您可以提供一些示例HTML结构,那么就可以更容易地确定您在哪里应用代码。
[['Latest Event New ETA: 2017-12-19 10:00 UTC more'],
['Type Tug',
'Flag France',
'IMO 9217474',
'MMSI 228058000',
'Callsign FOUL',
'Year Built –––'],
['Length 30 m',
'Width 10 m',
'Draught Avg 4.1 m / ...',
'Speed Avg/Max 7.5 kn / 7.3 kn',
'Deadweight 385 tons',
'Gross Tonnage 456 tons']]