是否可以打印像表一样的列表但跳过部分相同的数据列?
例如,我的清单:
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
如果无法使用表格,我也可以考虑使用字典。
答案 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