如何跟踪原始列表中的元素数和最后一个索引?
How to track element count and last index in their original list?
我需要一种非常有效的方法来遍历列表并将其元素作为字典键,并将它们的计数和最后位置作为值放入大小为 2 的列表中。
例如,列表 [1,1,1,2] 必须生成字典 {1:[3,2], 2:[1,3]}。
我希望这段代码可以工作:
myList = [1,1,1,2,2,2,3,4,5,5,6,7]
myDict = dict.fromkeys(myList, [0,0])
for i, e in enumerate(myList):
print(i, e)
myDict[e][0] += 1
myDict[e][1] = i
print(myDict)
但它的输出是
{1: [12, 11], 2: [12, 11], 3: [12, 11], 4: [12, 11], 5: [12, 11], 6: [12, 11], 7: [12, 11]}
而不是
{1: [3, 2], 2: [3, 5], 3: [1, 6], 4: [1, 7], 5: [2, 9], 6: [1, 10], 7: [1, 11]}
我没想到会这样,因为我将迭代变量 (i,e) 视为“常规”变量,因此我希望分配它们的“副本”,而不是像在以下情况下发生的引用列出。
如何解决这个问题?
问题来自您的 dict.fromkeys(...)
电话。它将 same 对象 [0,0]
分配给所有键,而不是此对象的 copy。
解决方案是将输出字典初始化为空字典。然后在你的循环中,首先检查键是否已经在字典中。如果没有,则使用 [0,0]
初始化新密钥,否则像您在代码中所做的那样执行增量和索引更新。
我认为这会非常快 - 使用计数器来获取出现的次数和 max/np。从哪里获得最高的 inedex。
import numpy as np
from collections import Counter
myList = [1,1,1,2,2,2,3,4,5,5,6,7]
a = np.array(myList)
{x[0]:[x[1],np.max(np.where(a==x[0]))] for x in Counter(a).most_common()}
输出
{1: [3, 2], 2: [3, 5], 5: [2, 9], 3: [1, 6], 4: [1, 7], 6: [1, 10], 7: [1, 11]}
我需要一种非常有效的方法来遍历列表并将其元素作为字典键,并将它们的计数和最后位置作为值放入大小为 2 的列表中。
例如,列表 [1,1,1,2] 必须生成字典 {1:[3,2], 2:[1,3]}。
我希望这段代码可以工作:
myList = [1,1,1,2,2,2,3,4,5,5,6,7]
myDict = dict.fromkeys(myList, [0,0])
for i, e in enumerate(myList):
print(i, e)
myDict[e][0] += 1
myDict[e][1] = i
print(myDict)
但它的输出是
{1: [12, 11], 2: [12, 11], 3: [12, 11], 4: [12, 11], 5: [12, 11], 6: [12, 11], 7: [12, 11]}
而不是
{1: [3, 2], 2: [3, 5], 3: [1, 6], 4: [1, 7], 5: [2, 9], 6: [1, 10], 7: [1, 11]}
我没想到会这样,因为我将迭代变量 (i,e) 视为“常规”变量,因此我希望分配它们的“副本”,而不是像在以下情况下发生的引用列出。
如何解决这个问题?
问题来自您的 dict.fromkeys(...)
电话。它将 same 对象 [0,0]
分配给所有键,而不是此对象的 copy。
解决方案是将输出字典初始化为空字典。然后在你的循环中,首先检查键是否已经在字典中。如果没有,则使用 [0,0]
初始化新密钥,否则像您在代码中所做的那样执行增量和索引更新。
我认为这会非常快 - 使用计数器来获取出现的次数和 max/np。从哪里获得最高的 inedex。
import numpy as np
from collections import Counter
myList = [1,1,1,2,2,2,3,4,5,5,6,7]
a = np.array(myList)
{x[0]:[x[1],np.max(np.where(a==x[0]))] for x in Counter(a).most_common()}
输出
{1: [3, 2], 2: [3, 5], 5: [2, 9], 3: [1, 6], 4: [1, 7], 6: [1, 10], 7: [1, 11]}