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によって要求された形式でテーブルを取得する方法を提供するため、この回答のみを追加します。

EDIT は、これが Python 2.6 で機能するように Counter の使用をコメントアウトしました。

# 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 に答える