添加列表列表的唯一列表组合,包括 int 和 str 值

Adding up unique list combinations of a list of lists including int and str values

我有一个子列表列表,其中包含一个人的姓名和 4 个以两位数表示的特征。列表如下所示

stud_lst=[['Pete', '36', '36', '36', '30'], ['Derek', '31', '21', '31', '20'], ...]

现在我想将人们配对并以 2 人和 3 人为一组组合他们的特征。因此在添加子列表项时我需要每个子列表的每个唯一组合。

示例:我需要数据库中所有人的以下新子列表 ['PeteDerek', '67', '57', '67', '50'] 以及 ['PeteDerekTommy' ...]

我考虑过

  1. 列表切片以获取所有名称,将它们与 itertools.combinations 并附加初始列表“stud_lst”。
  2. 我可以对数字列表切片执行相同的操作并将它们相加 zipfor 循环中。 但后来我陷入了适当的匹配。另外,这是很多代码,我觉得这不是很 pythonic

是否有任何图书馆可以提供帮助或更明智的方法?

您可以创建一个依赖于 itertools.combinations:

的生成器
from functools import reduce
import itertools as it


def combine_all(people):
    for r in range(2, len(people)+1):
        for combination in it.combinations(people, r):
            yield reduce(combine_two, combination)


def combine_two(a, b):
    a_name, *a_attr = a
    b_name, *b_attr = b
    return [f'{a_name}{b_name}', *[f'{int(x)+int(y)}' for x, y in zip(a_attr, b_attr)]]


from pprint import pprint
pprint(list(combine_all(stud_lst)))