将str列表排序为一对str,其中一个str有R

2024-04-18 07:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,如下所示:

["A TB", "A-R TB", "B TB", "B-R TB", "C TB", "C-R TB" ...]

但是字符串的顺序是随机的。如何编写一个将元素配对的函数,使输出看起来像:

[["A TB", "A-R TB"], ["B TB", "B-R TB"], ["C TB", "C-R TB"] ...]

Tags: 函数字符串元素列表顺序tb
3条回答

你只需按字典顺序对列表排序,然后两两阅读:

def grouped(lst):
    i = iter(sorted(lst))
    return list(zip(i, i))

另一种选择是使用^{}

def grouped(lst):
    return [list(g) for k, g in groupby(sorted(lst), lambda x: x[0])]

这样您就可以拥有任意大小的组。你知道吗

如果您不关心顺序,只想根据第一个字母对它们进行分组(因为不清楚):

from collections import defaultdict

a = ["A TB", "A-R TB", "B TB", "B-R TB", "C TB", "C -R TB"]
b = defaultdict(list)
c = []

for x in a:
    b[x[0]].append(x)
for x in b.values():
    c.append(x)
print(c)
# [['C -R TB', 'C TB'], ['B TB', 'B-R TB'], ['A TB', 'A-R TB']]

您可以按字符串的值分组,而不必使用'-R'。然后你可以构建你想要的列表。你知道吗

import re, collections
xs = ["A TB", "A-R TB", "B TB", "B-R TB", "C TB", "C -R TB"]
occurences = collections.defaultdict(list)
exp = re.compile(' *-R')
for x in xs:
    occurences[exp.sub('', x)].append(x)

res = list(occurences.values())
print(res)
# [['A TB', 'A-R TB'], ['B TB', 'B-R TB'], ['C TB', 'C -R TB']]

相关问题 更多 >