计算以列表中的相同项开头的列表数

时间:2015-10-22 12:43:23

标签: python list function python-2.7 count

所以我有一个列表:

result = [["1", "1", "a", 8.2],["1", "2", "c", 6.2],["2", "1", "a", 8.2]]

我想要一个函数,它返回以变量(index[0])开始"n"的列表数量。因此,如果n = '1'我在这种情况下得到2,如果n = '2' I get 1

编辑:我已尝试过这样的一些事情,但无法正常工作。

def Count(list,n):
result = []
value = 0
for i in list:
    if str(i[0]) == n:
        value = value + 1
        sum.append[value]
return len(sum)

print Count(result,1)

3 个答案:

答案 0 :(得分:0)

由于所有列表的长度都相同,您可以执行以下操作:

import itertools

result = [["1", "1", "a", 8.2],["1", "2", "c", 6.2],["2", "1", "a", 8.2]]

res=list(itertools.chain.from_iterable(result))

res[0::4].count('1')
# prints 2
res[0::4].count('2')
#prints 1

首先,使用itertools.chain展平列表列表(如果您有大量列表,则效率很高;否则简单的列表理解可能会更快),然后您将获得每个子列表的第一个元素计算某个字符串出现的频率。

您所写的更正功能:

result = [["1", "1", "a", 8.2],["1", "2", "c", 6.2],["2", "1", "a", 8.2]]

def Count(myList,n):

    value = 0
    for i in myList:
        if i[0] == str(n):
            value = value + 1               

    return value

print Count(result,2)

请勿使用list一词作为参数/变量名称。由于您实际传递了一个数字,因此必须将n转换为字符串(子列表中的元素已经是一个字符串);根本不需要sum.append行。

答案 1 :(得分:0)

result = [["1", "1", "a", 8.2],["1", "2", "c", 6.2],["2", "1", "a", 8.2]]
lst2 = [item[0] for item in result]
lst2.count("1")
result = [["1", "1", "a", 8.2],["1", "2", "c", 6.2],["2", "1", "a", 8.2]]

def Count(myList,n):
    lst2 = [item[0] for item in myList]
    return lst2.count(str(n))

print Count(result,1) #prints 2
print Count(result,2) #prints 1

答案 2 :(得分:0)

这是最简单的答案。你的老师永远不会相信你写的,抱歉。

def f(n, lists):
    return len(filter(lambda l: l[0] == n, lists))