gpt4 book ai didi

python - 列表串联,将以 ':' 结尾的元素添加到列表中,将其他元素添加到子列表中

转载 作者:行者123 更新时间:2023-11-28 21:51:19 27 4
gpt4 key购买 nike

我需要格式化列表的输出,以便将所有以 : 结尾的元素作为第一个元素,而其余元素位于该列表的子列表中。例如:

假设我们有:

A: B, C
B: D, F | G

到目前为止,我所做的是将其转换为以下列表:

['A:', 'B,', 'C', 'B:', 'D,', ['F', 'G']]

但现在我不知道如何得到以下输出:

[['A:',['B', 'C']], ['B:', ['D', ['F', 'G']]]

你能帮帮我吗?

编辑:在这里,我阅读了文件:

file = open('data.txt', 'r')
Y = []
for line in file:
for word in line.strip().split():
Y.append(str(word))

这部分是我将 ors 放入子列表的地方:

text = []
i = 0
while True:
if i > len(Y)-2:
# No more possible |'s, so wrap things up
text.append( Y[-1] )
break
if Y[i+1] == '|':
# Add the items around the |; move past the group:
if Y[i+2].endswith(','):
Y[i+2] = Y[i+2].replace(",", "")
text.append([Y[i], Y[i+2]])
else:
text.append([Y[i], Y[i+2]])
i += 3
else:
# Add the current element & move on
text.append( Y[i] )
i += 1
for id in range(len(text)-1):
if type(text[id]) != str:
if text[id][-1] == text[id+1]:
text.remove(text[id+1])

最佳答案

为什么要先拆分单词并将它们放在列表中?您可以直接遍历您的行并使用一个嵌套列表理解将它们拆分:

import re
with open('data.txt', 'r') as f :
[[k,[p,n.split('|')]] if '|' in n else [k,[p,n]] for k,(p,n) in [[i,j.split(',')] for i,j in [re.split(r'(?<=:) ',line) for line in f]]]

结果:

[['A:', ['B',' C']], ['B:', ['D', [' F ', ' G']]]]

但请注意,这不是通用解决方案!作为一种更通用的方式,如果您可能有一些其他定界符而不是 |例如,如果它是一个非单词字符,您可以拆分 n带有正则表达式的变量 ( re.split(r'\W',n) )。

注意:r'(?<=:) 'positive look behind这将根据 : 之后的空间拆分您的行.

如果你不想用 regex 分割线你可以使用str.partition :

with open('data.txt', 'r') as f :
[[k,[p,n.split('|')]] if '|' in n else [k,[p,n]] for k,(p,n) in [[i+j,t.split(',')] for i,j,t in [line.partition(':') for line in f]]]
[['A:', [' B',' C']], ['B:', [' D', [' F ', ' G']]]]

关于python - 列表串联,将以 ':' 结尾的元素添加到列表中,将其他元素添加到子列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30543834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com