如何存储列表列表的所有值及其出现频率以及索引?
how to store all the values of a list of lists and the frequence of their appearance as well as their index?
我的代码是这样的
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)
我需要每个值出现的次数以及它们的索引
list of lists 是 occ(里面有 50 个不同长度的列表)
当时的想法是遍历所有内容,将每个值存储在 idnt[i] 列表中,然后
它出现在 idntfrq[i] 列表中的列表的索引,然后删除
当前迭代列表中的元素,之后occ列表应该为空
那但不是,我上传了 occ[0][0] 的 prntscr 看看我的意思
注意:列表中的每个列表只包含每个元素一次,但我想计算
在每个 occ[i] 中的所有列表中出现(对于 50 中的 i)并且还保留索引enter image description here
此代码将完成您的要求:
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]]}
我认为这可行:
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)
我的代码是这样的
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)
我需要每个值出现的次数以及它们的索引
list of lists 是 occ(里面有 50 个不同长度的列表)
当时的想法是遍历所有内容,将每个值存储在 idnt[i] 列表中,然后 它出现在 idntfrq[i] 列表中的列表的索引,然后删除 当前迭代列表中的元素,之后occ列表应该为空 那但不是,我上传了 occ[0][0] 的 prntscr 看看我的意思
注意:列表中的每个列表只包含每个元素一次,但我想计算 在每个 occ[i] 中的所有列表中出现(对于 50 中的 i)并且还保留索引enter image description here
此代码将完成您的要求:
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]]}
我认为这可行:
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)