比较列表列表中的元素
comparing elements in list of lists
我基本上有一个这样的列表列表:
[['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')]
你的问题有点不清楚,试试这个看看是否可以。
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
将是您预期的结果。
如果您希望根据第一个元素对列表进行分组,您可以使用 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']]
我基本上有一个这样的列表列表:
[['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')]
你的问题有点不清楚,试试这个看看是否可以。
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
将是您预期的结果。
如果您希望根据第一个元素对列表进行分组,您可以使用 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']]