如何通过给定的分隔符拆分列表中的字符串并展平子字符串列表

1 python string list flatten

我有一个包含此列表的 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)

如何修改脚本以允许我在列表中拆分字符串,然后将新的子字符串插入原始字符串的位置,而不会覆盖列表中的其他元素?

Jbl*_*sco 5

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)


Moi*_*dri 5

您可以通过使用嵌套列表理解表达式来实现这一点:

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)