0

我有一个列表列表,并希望用破折号替换整个列表/矩阵中所有出现的相同单词,但第一次出现除外。我创建了一个单独的列表,其中计算了原始列表中每个元素的数量。我希望单词的第一次出现被计数列表中的项目替换,这样数字就在那里。

table = [['Bacteria', 'Aquificae', 'Persephonella'],
        ['Bacteria', 'Aquificae', 'Thermovibrio'],
        ['Bateria', 'Firmicutes', 'Bacillus']]
countlist = ['Bacteria3', 'Aquificae2', 'Persephonella1', 'Thermovibrio1', 'Firmicutes1', 'Bacillus1']

所以当我完成后,我希望列表是这样的:

table = [['Bacteria3', 'Aquificae2', 'Persephonella1'],
        ['-', '-', 'Thermovibrio1'],
        ['-', 'Firmicutes1', 'Bacillus1']]

我想把它放到一个制表符分隔的表格中,这样它最终看起来不会那么混乱。

这是我目前用计数列表版本替换单词但不起作用的内容:

for num in range(1525):
    for n in table[num]:
            for s in count:
                    if n in s:
                            n = s

编辑 在 Python 2.6.1 中工作

4

2 回答 2

1

我不知道是否需要带有破折号的表,或者只是您认为需要进入制表符分隔表的步骤,此代码将获得一个列表,其名称后附有总数,可用于使制表符分隔桌子

from collections import Counter
count= Counter([item for sublist in table for item in sublist])
totals= ["%s%i"%(e,c) for e,c in count.most_common()]

#can then be tab deliminated
"\t".join(totals)
于 2012-06-14T17:06:34.630 回答
1

我同意关于数据结构的评论和其他答案中所说的一切。我只添加这个答案,因为它提供了一种以 OP 请求的格式获取表格的方法。

编辑注释掉了 Counter 的使用,以便允许它在 Python 2.6 上工作

# from collections import Counter
from pprint import pprint

table = [['Bacteria', 'Aquificae', 'Persephonella'],
        ['Bacteria', 'Aquificae', 'Thermovibrio'],
        ['Bacteria', 'Firmicutes', 'Bacillus']]

# count_dict = Counter( [ item for row in table for item in row   ] )

count_dict = {}
for row in table:
    for item in row:
        count_dict[item] = count_dict.get(item, 0) + 1

for index_row, row in enumerate(table):
    for index_col, element in enumerate(row):
        if element in count_dict:
            table[index_row][index_col] = '%s %s' % (element, count_dict[element])
            del count_dict[element]
        else:
            table[index_row][index_col] = '-'

pprint(table)

产生:

[['Bacteria 3', 'Aquificae 2', 'Persephonella 1'],
 ['-', '-', 'Thermovibrio 1'],
 ['-', 'Firmicutes 1', 'Bacillus 1']]
于 2012-06-14T17:23:02.057 回答