簡體   English   中英

Python-列表列表中子字符串的出現

[英]Python - occurrence of substring in a list of lists

我正在使用一個函數,該函數將在列表列表中搜索子字符串,作為列表中每個項目的前三個字符。 例如,如果子字符串為'aaa' ,並且列表列表為[['aaa111', 'aba123', 'aaa123'], ['aaa302', 'cad222']] ,則我希望該函數返回a百分比列表[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中按列表進行計數?

兩件事情...

  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]

使用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]

修改后的代碼對我有用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM