Python 如何按给定的分隔符拆分列表中的字符串并展平子字符串列表
我有一个包含以下列表的python脚本:Python 如何按给定的分隔符拆分列表中的字符串并展平子字符串列表,python,string,list,flatten,Python,String,List,Flatten,我有一个包含以下列表的python脚本: blocks = [ "item-1", "item-2", "item-3.0;item-3.1;item-3.2" ] 我试过这个: for (i, block) in enumerate(blocks): if ";" in block: [blocks.insert(i, c) for c in block.split(";")] else: blocks.insert(i, block) 要获得此信息:
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
我试过这个:
for (i, block) in enumerate(blocks):
if ";" in block:
[blocks.insert(i, c) for c in block.split(";")]
else:
blocks.insert(i, block)
要获得此信息:
blocks = [
"item-1",
"item-2",
"item-3.0",
"item-3.1",
"item-3.2"
]
不幸的是,我的代码一直在覆盖列表中的元素,剩下的是:
blocks = [
"item-1",
"item-2",
"item-3.2"
]
如何修改脚本以允许在列表中拆分字符串,然后将新的子字符串插入原始字符串的位置,而不覆盖列表中的其他元素?您可以创建一个新列表来保存结果,而不是在循环时修改原始列表:
result = []
for block in blocks:
result.extend(block.split(";"))
result
# ['item-1', 'item-2', 'item-3.0', 'item-3.1', 'item-3.2']
受@Jblasco答案的启发,您还可以使用chain:
制作一个新的列表可能会更容易:
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
new_blocks = []
for block in blocks:
for c in block.split(";"):
new_blocks.append(c)
# new_blocks = ['item-1', 'item-2', 'item-3.0', 'item-3.1', 'item-3.2']
split将返回一个列表,您不需要检查“;”在街区内:
In [34]: [ii.split(';') for ii in blocks]
Out[34]: [['item-1'], ['item-2'], ['item-3.0', 'item-3.1', 'item-3.2']]
现在唯一需要做的就是把所有的列表加在一起,加上sum函数
sum( [ii.split(';') for ii in blocks] , [])
您可以通过使用嵌套列表理解表达式来实现这一点:
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
my_list = [a for b in blocks for a in b.split(';')]
my_列表中包含的内容将是:
在迭代时就地编辑列表不是一个好主意 正如其他答案所说,列一个新的清单。如果你对列表的理解有兴趣,并且让你的脑袋有点爆炸,试试以下方法:
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
[substr for block in blocks for substr in block.split(';')]
输出:
只需将列表连接在一起,然后再次拆分
在总结中,不建议列出:
对于某些用例,sum有很好的替代方案。这个
连接字符串序列的首选快速方法是调用
.连接顺序。使用扩展名添加浮点值的步骤
精度,参见math.fsum。要连接一系列的可重用项,
考虑使用ItdioStudio.Calp.
为什么没有一个新的列表,把它们都添加到一个新的列表中。你甚至不需要我也不需要在这里枚举。
['item-1', 'item-2', 'item-3.0', 'item-3.1', 'item-3.2']
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
[substr for block in blocks for substr in block.split(';')]
';'.join(blocks).split(';')
['item-1', 'item-2', 'item-3.0', 'item-3.1', 'item-3.2']