0

我正在使用一个函数,该函数将在列表列表中搜索子字符串,作为列表中每个项目的前三个字符。例如,如果子字符串是'aaa'并且列表列表是[['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']],我希望函数返回百分比列表[66, 50],因为'aaa'出现在第一个列表中 2/3 次,在第二个列表中出现 1/2 次。到目前为止,我有:

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

两件事情...

  1. 重置你count的每个循环
  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 回答