计算 python 内嵌套列表(x 和 y 依赖项)中的特定项目
count specific items in a nested list (x and y dependencies) inside python
示例我有这些列表
bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]
那我想把'Cerah'和'Iya'算到一个整型变量中,这些count的答案应该是2,请问可以得到count吗?
我试过计数,但它只计数 1 项。
我的失败解决方案:
bersarang.count('Cerah' and 'Iya')
如果你想计算出现两个值的子列表,你可以这样做:
bersarang = [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'],
['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
['Mendung', 'Normal', 'Kuat', 'Iya']]
def count_values(values, lst):
s = set(values)
return sum(s.issubset(l) for l in lst)
res = count_values(('Cerah', 'Iya'), bersarang)
print(res)
输出
2
基本上,该函数将检查值是否是列表的每个子列表的子集,为此我们使用 issubset, then count using sum。
另一种方法是:
def count_values(values, lst):
return sum(all(v in l for v in values) for l in lst)
基本上检查 all 个值是否包含在每个子列表中。
您可以使用 for
循环:
代码解释:
count = 0
设置 count
为 0
for sub_l in l:
遍历 l
if set(elems).issubset(sub_l): count += 1
如果 elems
在子列表 (sub_l
)
中,则向 count
添加 1
return count
返回 count
变量
代码:
def count_elems(elems, l):
count = 0
for sub_l in l:
if set(elems).issubset(sub_l):
count += 1
return count
print(count_elems(['Iya', 'Cerah'], [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'], ['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
['Mendung', 'Normal', 'Kuat', 'Iya']]))
尝试使用收款计数器
>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
使用python的内置函数count
bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]
def countit(thing):
count = 0
for i in bersarang:
count += i.count(thing)
return count
print(countit("Cerah"),countit("Iya"))
示例我有这些列表
bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]
那我想把'Cerah'和'Iya'算到一个整型变量中,这些count的答案应该是2,请问可以得到count吗? 我试过计数,但它只计数 1 项。
我的失败解决方案:
bersarang.count('Cerah' and 'Iya')
如果你想计算出现两个值的子列表,你可以这样做:
bersarang = [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'],
['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
['Mendung', 'Normal', 'Kuat', 'Iya']]
def count_values(values, lst):
s = set(values)
return sum(s.issubset(l) for l in lst)
res = count_values(('Cerah', 'Iya'), bersarang)
print(res)
输出
2
基本上,该函数将检查值是否是列表的每个子列表的子集,为此我们使用 issubset, then count using sum。
另一种方法是:
def count_values(values, lst):
return sum(all(v in l for v in values) for l in lst)
基本上检查 all 个值是否包含在每个子列表中。
您可以使用 for
循环:
代码解释:
count = 0
设置count
为 0for sub_l in l:
遍历l
中,则向if set(elems).issubset(sub_l): count += 1
如果elems
在子列表 (sub_l
)count
添加 1return count
返回count
变量
代码:
def count_elems(elems, l):
count = 0
for sub_l in l:
if set(elems).issubset(sub_l):
count += 1
return count
print(count_elems(['Iya', 'Cerah'], [['Cerah', 'Tinggi', 'Lemah', 'Iya'], ['Cerah', 'Tinggi', 'Kuat', 'Iya'], ['Mendung', 'Tinggi', 'Lemah', 'Tidak'], ['Hujan', 'Tinggi', 'Lemah', 'Iya'],
['Hujan', 'Normal', 'Lemah', 'Iya'], ['Hujan', 'Normal', 'Kuat', 'Tidak'],
['Mendung', 'Normal', 'Kuat', 'Iya']]))
尝试使用收款计数器
>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
使用python的内置函数count
bersarang=[['Cerah','Tinggi','Lemah','Iya'],['Cerah','Tinggi','Kuat','Iya'],['Mendung','Tinggi','Lemah','Tidak'],['Hujan','Tinggi','Lemah','Iya'],['Hujan','Normal','Lemah','Iya'],['Hujan','Normal','Kuat','Tidak'],['Mendung','Normal','Kuat','Iya']]
def countit(thing):
count = 0
for i in bersarang:
count += i.count(thing)
return count
print(countit("Cerah"),countit("Iya"))