[英]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中按列表进行计数?
两件事情...
count
我改变了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]
使用lambda
和map
函数的解决方案:
>>> [(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.