【问题标题】:how to store all the values of a list of lists and the frequence of their appearance as well as their index?如何存储列表列表的所有值以及它们出现的频率以及它们的索引?
【发布时间】:2022-01-07 16:14:15
【问题描述】:

我的代码是这样的

idnt=[] 
idntfrq=[]           

for i in range(len(occ)):
    idnt.append([])
    idntfrq.append([])
    for j in range(len(occ[i])):
        for j2 in range(j,len(occ[i])):
            for d in occ[i][j]:
                idnt[i].append(d)
                idntfrq[i].append([j])
                occ[i][j].remove(d)
                for d2 in occ[i][j2]:
                    if d==d2:
                
                        idntfrq[i][-1].append(j2)
                        occ[i][j2].remove(d)
        

我需要每个值的出现次数及其索引

列表的列表是 occ(里面有 50 个列表,每个列表的长度不同)

想法是遍历所有内容,将每个值存储在 idnt[i] 列表中,然后 它出现在 idntfrq[i] 列表中的列表的索引,然后删除 当前迭代列表中的元素,之后的occ列表应该为空 但事实并非如此,我上传了 occ[0][0] 的 prntscr 来看看我的意思

注意:列表中的每个列表仅包含每个元素一次,但我想计算 在每个 occ[i] 内的所有列表中出现(对于 50 中的 i)并且还保持索引enter image description here

【问题讨论】:

  • 为了让您的问题更加难以理解,请您: - 添加输入数据示例 - 添加输出示例 - 不要将您的文本以粗体字体表示谢谢 :)

标签: python list for-loop iteration


【解决方案1】:

此代码将满足您的要求:

mainList = [[1,2,3],[3,4,5],[1,5,9]]
d = {}
for l in mainList:
    for item in l:
        if item in d.keys():
            d[item] +=1
        else:
            d[item] = 1
print(d)

输出:

{1: 2, 2: 1, 3: 2, 4: 1, 5: 2, 9: 1}

它在字典中给出答案,其中键是项目,值是出现次数。

此输出并在需要时进一步格式化。

如果您需要每次出现数字时的索引,您可以简单地添加一个字典 di,其中将项目作为键和索引对列表,项目作为值出现在其中。

这可以通过在循环中添加di[item].append([idx,jdx])di[item] = [[idx,jdx]] 并在循环之前将其定义为di = {} 来完成,如下所示:

mainList = [[1,2,3],[3,4,5],[1,5,9]]
d = {}
di = {}
idx = -1
for l in mainList:
    idx += 1
    jdx = -1
    for item in l:
        jdx += 1
        if item in d.keys():
            d[item] +=1
            di[item].append([idx,jdx])
        else:
            d[item] = 1
            di[item] = [[idx,jdx]]
print(d)
print(di)

输出:

{1: 2, 2: 1, 3: 2, 4: 1, 5: 2, 9: 1}
{1: [[0, 0], [2, 0]], 2: [[0, 1]], 3: [[0, 2], [1, 0]], 4: [[1, 1]], 5: [[1, 2], [2, 1]], 9: [[2, 2]]}

【讨论】:

  • 有没有办法获取这些值所属的原始列表的索引?这将是非常好的,它将基本上完成我的工作
  • @kyriakoskastriotis 是的,您可以创建一个索引指示器变量 idxjdx,然后在每次迭代时对其进行更新,然后您可以随意保存它。
  • Thnx ,我试试看 :D
  • @kyriakoskastriotis 太棒了,如果你明白了,请告诉我,如果没有,我可以再次尝试提供帮助。
  • 我似乎无法让它变得真诚,我一直以我开始的原始代码块结束,如果不是太麻烦,你介意更新你的答案吗?我将不胜感激!
【解决方案2】:

我认为这可行:

from collections import Counter
list_of_lists = [[1, 2, 3], [4, 1, 2], [3, 4, 5]]
counter = Counter()
for _list in list_of_lists:
    counter.update(_list)

【讨论】:

  • 我很乐意知道为什么我的答案被否决了,否则我无法帮助找到解决方案:)
  • 我需要知道每个值在所有列表中的频率,而不是列表之间的频率
  • 是的,这就是我的代码正在做的事情......您是否尝试过至少在投票之前运行它?
  • 投反对票的不是我,反正我的分数不允许
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2016-05-24
相关资源
最近更新 更多