在 Python 中查找列表列表中每个位置给定字符的频率


让我们考虑一个场景,您有一个列表,其中包含列表作为其元素。我们有兴趣在内部列表的不同位置查找一个字符的频率。下面的示例将阐明需求。

考虑下面给出的列表列表。

listA = [['a', 'a', 'b'],
['a', 'c', 'b'],
['c', 'a', 'b'],
['c', 'a', 'a']]

在上面的列表中,我们有元素,它们是包含 3 个元素的列表。如果我考虑第一个内部列表,它在位置 0、1、2 处具有 a、a、b。类似地,对于第 3 个列表,它在 0、1、2 处为 c、a、b。考虑到所有内部列表,我们可以说位置 0 处 a 的频率为 2,位置 1 处为 3,位置 2 处为 1。

下面的程序旨在为列表列表中的任何元素查找此类值。

使用 pandas

pandas 库被广泛用于通过创建数据帧来进行数据操作。因此,我们创建一个数据帧并使用 where 子句循环遍历它,以查找数据帧中每个位置是否存在值“a”。

示例

 在线演示

import pandas as pd

# Given list of lists
listA = [['a', 'a', 'b'],
['a', 'c', 'b'],
['c', 'a', 'b'],
['c', 'a', 'a']]

# using pandas
df = pd.DataFrame(listA)
res = df.where(df == 'a', 0).where(df != 'a', 1)

# Result
print("Occurrence of 'a' at 0,1 and 2 position\n", res.sum())

输出

运行以上代码会得到以下结果:

Occurrence of 'a' at 0,1 and 2 position
0 2.0
1 3.0
2 1.0

使用 zip

我们可以使用 for 循环遍历列表中子列表中的每个位置,并将 zip 函数应用于整个列表列表。

示例

 在线演示

# Given list of lists
listA = [['a', 'a', 'b'],
['a', 'c', 'b'],
['c', 'a', 'b'],
['c', 'a', 'a']]

res = [elem.count('a') for elem in zip(*listA)]
# Result
print("Occurrence of 'a' at 0,1 and 2 position\n", res)

输出

运行以上代码会得到以下结果:

Occurrence of 'a' at 0,1 and 2 position
[2, 3, 1]

更新于: 2020-05-05

194 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.