如何在列表索引中计数()
Posted
技术标签:
【中文标题】如何在列表索引中计数()【英文标题】:how to count() within list index 【发布时间】:2021-04-09 22:50:01 【问题描述】:我有一个二维列表。
[[3, 3, 5],
[3, 2, 8],
[2, 1, 3]]
我想计算 3 作为该列表中每个列表的第一个值出现的次数,最好不要遍历。
【问题讨论】:
“不迭代列表”是什么意思?您是否出于某种原因要避免 for 循环和列表推导? 这能回答你的问题吗? How do I flatten a list of lists/nested lists? 【参考方案1】:一种不使用for
循环的方法:
len(list(filter(lambda x: x[0] == 3, arr)))
输出:
2
【讨论】:
【参考方案2】:用list
理解试试这个sum
:
print(sum([i[0] == 3 for i in lst]))
输出:
2
【讨论】:
计算每个值,但我只是在寻找特定的索引。在这个例子中,正确的输出是 2。【参考方案3】:from collections import Counter
lst = [[3, 3, 5],
[3, 2, 8],
[2, 1, 3]]
print (Counter(sublist[0] for sublist in lst)[3])
您可以使用计数器功能。提及您要在子列表中查看的位置,以及您要为其打印结果的键(即整数 3)。
输出:
2
【讨论】:
这不是很贵吗,因为我们只对列表列表中每个元素的固定位置感兴趣? 当然,但谁知道 OP 想用它做什么。如果仅限于这个问题,考虑到数据的长度,扩展性不是问题。【参考方案4】:仅使用 numpy:
import numpy as np
a = [[3, 3, 5],
[3, 2, 8],
[2, 1, 3]]
b = a[:, 0]
c = np.where(b == 3)
print(c[0].shape[0])
仅使用熊猫:
import pandas as pd
a = [[3, 3, 5],
[3, 2, 8],
[2, 1, 3]]
df = pd.DataFrame(a)
print(df[df[0] == 3].shape[0])
输出:
2
【讨论】:
【参考方案5】:您只需要在切片和比较方面检查输入数字的顺序。
根据python 3.8
代码语法
lists = [[3, 3, 5], [3, 2, 8], [2, 1, 3]]
num = int(input("check our number: "))
counter = 0
for each in lists:
if num == each[0]:
counter +=1
print (f" your num occur found: counter times ")
输出
check our number: 3
your 3 occur found: 2 times
[Program finished]
【讨论】:
【参考方案6】:如果您不想使用循环,我认为来自 itertools 的链可能是解决方案
from itertools import chain
t=[[1, 2, 3], [3, 5, 6], [7], [8, 9]]
new_list = list(chain(*t))
print(new_list)
输出 [1、2、3、3、5、6、7、8、9]
在此之后,您可以使用 count 函数 this 'new_list' 来检查任何元素的计数
【讨论】:
以上是关于如何在列表索引中计数()的主要内容,如果未能解决你的问题,请参考以下文章