【问题标题】:comparing elements in list of lists比较列表列表中的元素
【发布时间】:2023-04-03 19:06:01
【问题描述】:

我基本上有一个这样的列表列表: [['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od']] 我希望输出为['sd pd od ; pd1 od2 .', 'sd2 pd2 od .'] 所以,我想比较每个列表的第一个元素,如果它们相同,我想省略第一个元素(出现在第二个列表中)。

这是我的代码,它不工作,因为它比较元素太多,我不知道为什么。

def simplistic(triples):
base = []
for x in triples:
    for y in triples:
        if x[0] == y[0]:
            base.append((x[:],y[1],y[2]))
print(base)

这段代码的输出是:

[(['sd', 'pd', 'od'], 'pd', 'od'), (['sd', 'pd', 'od'], 'pd1', 'od2'), (['sd', 'pd1', 'od2'], 'pd', 'od'), (['sd', 'pd1', 'od2'], 'pd1', 'od2'), (['sd2', 'pd2', 'od'], 'pd2', 'od')]

【问题讨论】:

  • 如果输入是[['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od'],['sd2', 'pd2', 'od3']]。期望的输出是什么?
  • 应该是 ['sd pd od ; pd1 od2 .', 'sd2 pd2 od ; pd2 od3.']
  • 我已经更新了我的答案,检查是否正常。

标签: python list loops multidimensional-array list-comparison


【解决方案1】:

由于您的问题有点不清楚,请尝试此操作并检查是否正常。

bad_list = []
f=''
for i,s in enumerate(l):
    if s[0] == l[i-1][0] or s[0] in bad_list:
        f = f + ' '.join(s[1:])
        bad_list.append(s[0])           
    else:
        f = f + ' '.join(s)
    f = f+ ' ;'
f = [f[:-1] + '.']

f 将是您的预期结果。

【讨论】:

    【解决方案2】:

    如果您希望根据第一个元素对列表进行分组,您可以使用 defaultdict 轻松完成此操作

    >>> from collections import defaultdict
    >>> triples =  [['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]
    >>> d = defaultdict(list)
    >>> 
    >>> for k,*l in triples:
    ...     d[k].extend(l)
    ...
    >>> res = [[k]+l for k,l in d.items()]
    >>> print(res)
    [['sd', 'pd', 'od', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2020-02-21
      • 2016-11-17
      • 2017-03-12
      • 2020-09-20
      相关资源
      最近更新 更多