Bas*_*asj 2 python list concatenation
假设我们有列表
L = ['a', '!b', '!c', 'd', 'e', '!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)
如果每个元素以!.
预期输出:
M = ['a!b!c', 'd', 'e!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)
这有效,但join将列表转换为字符串可能会不必要地复杂,然后将字符串重新拆分为列表:
M = ''.join(('' if l.startswith('!') else '\n') + l for l in L).splitlines()[1:]
# ['a!b!c', 'd', 'e!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)
是否有一种更简单的方法可以根据条件 ( '!' in l)从列表中连接元素?
可能你正在寻找一个单线,但是这个不太复杂的循环怎么样?
L = ['a', '!b', '!c', 'd', 'e', '!f', 'g', 'h']
M = []
for x in L:
if x.startswith("!"):
M[-1] += x
else:
M.append(x)
# ['a!b!c', 'd', 'e!f', 'g', 'h']
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢简短易读,则可以使用三元pop...
for x in L:
M.append(M.pop() + x if x.startswith("!") else x)
Run Code Online (Sandbox Code Playgroud)
我想详细了解一下与“聪明”单行的解决方案reduce,groupby,takewhile,或“加入和分裂”解决方案,如你有一个,但如果他们在所有的工作,他们只是让问题更加复杂。我认为这是一种情况,如果你想要一个单线,你应该只为它定义一个函数。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |