我有一个列表,lol
[ ['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'],
['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl'], ...] 每个内部列表都有3个元素,它们都是当前的字符串。我想要做的是将第二项和第三项拆分为空格字符,以创建如下内容:
[
['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg'] ],
...
] 重要的是,这些新的嵌套列表是具有第一项(例如filiabus)的同一个列表的一部分。第一个元素本身可以是一个列表,如果它使它更简单的话。
我觉得像这样的事情应该能起作用
test=[]
for i in lol:
for j in i:
test.append([j[0],j[1].split(' '), j[2].split(' ')])但它只会产生:
>>> test
[['f', ['i'], ['l']], ['f', ['i'], ['l']], ['f', ['i'], ['l']], ['c', ['a'], ['n']], ['c', ['a'], ['n']], ['c', ['a'], ['n']]]
Thanks!发布于 2020-12-09 19:48:25
当您的初始列表包含3长度列表时,您可以直接将它们解压在3个变量中,如
for name, v1, v2 in values:然后,结果只是第一个值,另外两个值都分裂了(没有分隔符在‘连续空格’上分裂)。
values = [['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'],
['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl']]
result = [[name, v1.split(), v2.split()] for name, v1, v2 in values]
print(result) # [['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg']],
# ['canēs', ['canis', '+N', '+Acc', '+Pl'], ['canis', '+N', '+Abl', '+Pl']]]发布于 2020-12-09 19:49:32
对于任何大小的列表,您都可以这样做:
lol = [['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'],
['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl']]
def transform(sublist):
first, *others = sublist
return [first, *(item.split() for item in others)]
out = [transform(sublist) for sublist in lol]
print(out)
# [['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg']],
# ['canēs', ['canis', '+N', '+Acc', '+Pl'], ['canis', '+N', '+Abl', '+Pl']]]发布于 2020-12-09 19:46:19
我相信这就是你想要做的。
lol = [ ['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'],
['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl']]
# Iterate through each list in lol
for i in range(len(lol)):
# Iterate through each string in the list
for j in range(len(lol[i])):
# Only split if string contains a space
if " " in lol[i][j]:
# Reassign position
lol[i][j] = lol[i][j].split(" ")
print(lol)
# Prints
#[['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg']],
#['canēs', ['canis', '+N', '+Acc', '+Pl'], ['canis', '+N', '+Abl', '+Pl']]]关键的事情是,不是迭代每个元素,而是遍历每个元素的每个索引。这允许您重新分配到元素的位置。
另外,请注意,当您尝试在您的示例中访问j[i]时,您访问的是每个字母,而不是每个单词。每个单词都是i[x]。
这个答案是更易读的版本;要获得更短的列表理解版本,请查看azro的答案。
https://stackoverflow.com/questions/65223775
复制相似问题