打印列表没有重复的项目

时间:2017-12-15 08:52:20

标签: python

是否可以打印像表一样的列表但跳过部分相同的数据列?

例如,我的清单:

l = [('name1','species','description','country','n/a'),
     ('name1','species','description','country','plasmid1'),
     ('name1','species','description','country','plasmid2')]


for l in list_description:
    print '\t'.join(l)

我得到了什么:

name1 species description country n/a
name1 species description country plasmid1
name1 species description country plasmid2

我希望得到什么:

name1 species description country n/a
                                  plasmid1
                                  plasmid2

如果无法使用表格,我也可以考虑使用字典。

4 个答案:

答案 0 :(得分:3)

你可以跟踪最后一行打印,比较两行,然后用相同数量的空格替换相同的元素。

import itertools

l = [('name1','species','description','country','n/a'),
     ('name1','species','description','country','plasmid1'),
     ('name1','species','description','country','plasmid2')]

last_line = []
for ll in l:
    line = [" "*len(el_l) if el_l == el_last else el_l
            for el_l, el_last in itertools.zip_longest(ll, last_line, fillvalue=None)]
    last_line = ll
    print("\t".join(line))

答案 1 :(得分:2)

亚当的解决方案很好,但我也想提供一个按照你的建议使用字典的解决方案。这样你在数据解析方面有了更多的灵活性,不需要关心排序,并且附加操作也更简单:

l = [('name1','species','description','country','n/a'),
     ('name1','species','description','country','plasmid1'),
     ('name1','species','description','country','plasmid2')]

d = {}
for line in l:
  key, val = ' '.join(line[:-1]), line[-1]
  if key in d:
    d[key] += '\n' + ' '*(len(key)+1) + val
  else:
    d[key] = val

for key, val in d.items():
  print("{} {}".format(key, val))

输出:

name1 species description country n/a
                                  plasmid1
                                  plasmid2

答案 2 :(得分:1)

你可以尝试列表理解,但它很复杂:

l = [('name1','species','description','country','n/a'),
     ('name1','species','description','country','plasmid1'),
     ('name1','species','description','country','plasmid2')]

print ' '.join([l[j][i]+"\n"*int(i==len(l[j])-1) if len(set([k[i] for k in l])) == len(l) or j==0 else ' '*len([k[i] for k in l][0]) for j in range(len(l)) for i in range(len(l[j]))])
name1 species description country n/a
                                   plasmid1
                                   plasmid2

>>> 

答案 3 :(得分:0)

如果sendKeys(Keys.ENTER);中的WebElement.sendKeys(Keys.RETURN);位于索引tuple,请打印以空格分隔的所有0元素。否则,打印空白字符加上每个list_description中索引为tuple的项目。

-1