我有一个包含此列表的 python 脚本:
blocks = [
"item-1",
"item-2",
"item-3.0;item-3.1;item-3.2"
]
Run Code Online (Sandbox Code Playgroud)
我试过这个:
for (i, block) in enumerate(blocks):
if ";" in block:
[blocks.insert(i, c) for c in block.split(";")]
else:
blocks.insert(i, block)
Run Code Online (Sandbox Code Playgroud)
要得到这个:
blocks = [
"item-1",
"item-2",
"item-3.0",
"item-3.1",
"item-3.2"
]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的代码不断覆盖列表中的元素,我只剩下这个:
blocks = [
"item-1",
"item-2",
"item-3.2"
]
Run Code Online (Sandbox Code Playgroud)
如何修改脚本以允许我在列表中拆分字符串,然后将新的子字符串插入原始字符串的位置,而不会覆盖列表中的其他元素?
split 将返回一个列表,您不需要检查是否 ';' 在块中:
In [34]: [ii.split(';') for ii in blocks]
Out[34]: [['item-1'], ['item-2'], ['item-3.0', 'item-3.1', 'item-3.2']]
Run Code Online (Sandbox Code Playgroud)
所以现在您唯一需要做的就是将所有列表与函数 sum 相加。
sum( [ii.split(';') for ii in blocks] , [])
Run Code Online (Sandbox Code Playgroud)
您可以通过使用嵌套列表理解表达式来实现这一点:
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(';')]
Run Code Online (Sandbox Code Playgroud)
内容保留my_list将是:
['item-1', 'item-2', 'item-3.0', 'item-3.1', 'item-3.2']
Run Code Online (Sandbox Code Playgroud)