0

リストの各項目の最初の3文字として、リストのリスト内の部分文字列を検索する関数を使用しています。たとえば、部分文字列が'aaa'で、リストのリストがである場合、最初のリストに2/3回、2番目のリストに1/2回表示されるため[['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']]、パーセンテージのリストを返す関数が必要です。これまでのところ:[66, 50]'aaa'

def percentage(list_of_lists, substring):
    count = 0
    percentage = []
    for item in list_of_lists:
        for i in item:
            if substring == i[0:3]:
                count += 1
        percentage.append(int(count / len(item) * 100))
    return percentage

コードが多すぎる可能性があることは理解していますが、Pythonの要点を理解しているだけなので、心配する必要はありません。

>>> percentage([['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']], 'aaa')
[66, 150]

list_of_listsのリストごとにカウントするにはどうすればよいですか?

4

3 に答える 3

5

2つのこと...

  1. countforeachループをリセットします
  2. 除算にはfloatを使用します(python 2.xの場合のみ)

count->を変更しました0.0

def percentage(list_of_lists, substring):
    percentage = []
    for item in list_of_lists:
        count = 0.0
        for i in item:
            if substring == i[0:3]:
                count += 1
        percentage.append(int(count / len(item) * 100))
    return percentage

# Test
In [17]: l = [['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']]
In [18]: s = 'aaa'
In [19]: percentage(l,s)
Out[19]: [66, 50]
于 2012-11-05T06:02:04.393 に答える
2

使用するソリューションlambdamap機能:

>>> [(sum(map(lambda z: "aaa" in z,z))*100/len(z)) for z in [y for y in [['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']]]]
[66, 50]
于 2012-11-05T06:32:45.900 に答える
1

この変更されたコードは私のために働きます:

def percentage(list_of_lists, substring):
    count = 0
    percentage = []
    for item in list_of_lists:
        for i in item:
            if substring == i[0:3]:
                count += 1
        percentage.append(int(count / len(item) * 100))
        count = 0
    return percentage
于 2012-11-05T06:05:37.550 に答える