Python 检查列表1是否存在重复项,并在列表2和列表3中保留信息

Python 检查列表1是否存在重复项,并在列表2和列表3中保留信息,python,list,Python,List,这是我的第一个问题。我希望有人能帮助我。 我有3个列表(L1、L2、L3),其中1个需要检查重复项。这些重复项应汇总为一个值。 例如: L1需要变成:L1=[10.000,20.000,50.000,100.000] L2和L3中的值(其中20.000个重复项)应相加。 L2必须是:L2=[1,2,1,1] L3必须是:L3=[0,0,0,1] 我总结了L1列表: import collections counter =collections.Counter(L1) print(counter.

这是我的第一个问题。我希望有人能帮助我。 我有3个列表(L1、L2、L3),其中1个需要检查重复项。这些重复项应汇总为一个值。 例如:

L1需要变成:L1=[10.000,20.000,50.000,100.000] L2和L3中的值(其中20.000个重复项)应相加。 L2必须是:L2=[1,2,1,1] L3必须是:L3=[0,0,0,1]

我总结了L1列表:

import collections
counter =collections.Counter(L1)
print(counter.keys())
现在我需要对列表L2和L3中的值进行汇总,其中包含重复项。
我希望我的问题是可以理解的。

如果且仅当L1被排序时,您可以使用以下内容:

L1 = [10.000, 20.000, 20.000, 50.000, 100.000]
L2 = [1, 1, 1, 1, 1]
L3 = [0, 0, 0, 0, 1]

doubel_indices = [i for i in range(len(L1)-1) if L1[i] == L1[i+1]] #check the position of a double value (therefore L1 needs to be sorted here)

for i in sorted(doubel_indices, reverse=True):
    L2[i+1] += L2[i]    #add the values
    L3[i+1] += L3[i]    #add the values
    del L1[i]           #delete the dublicate position
    del L2[i]           #delete the dublicate position
    del L3[i]           #delete the dublicate position

print(L1)
print(L2)
print(L3)
输出

[10.0, 20.0, 50.0, 100.0]
[1, 2, 1, 1]
[0, 0, 0, 1]

如果且仅当L1已排序时,您可以使用:

L1 = [10.000, 20.000, 20.000, 50.000, 100.000]
L2 = [1, 1, 1, 1, 1]
L3 = [0, 0, 0, 0, 1]

doubel_indices = [i for i in range(len(L1)-1) if L1[i] == L1[i+1]] #check the position of a double value (therefore L1 needs to be sorted here)

for i in sorted(doubel_indices, reverse=True):
    L2[i+1] += L2[i]    #add the values
    L3[i+1] += L3[i]    #add the values
    del L1[i]           #delete the dublicate position
    del L2[i]           #delete the dublicate position
    del L3[i]           #delete the dublicate position

print(L1)
print(L2)
print(L3)
输出

[10.0, 20.0, 50.0, 100.0]
[1, 2, 1, 1]
[0, 0, 0, 1]

这是我能想到的最具Python风格的方法-

从集合导入计数器
#初始值
L1=[10.000,20.000,20.000,50.000,100.000]
L2=[1,1,1,1,1]
L3=[0,0,0,0,1]
#创建一个dict,每个键都是唯一的,每个值是给定列表中所述键的出现次数(L1)
L1_计数器=计数器(L1)
#创建一个dict,其中每个键都是唯一的,从L1开始,每个值都是从L3开始的,根据位置交叉引用
#将所述列表的值分配给L3
L3=列表(dict(zip(L1,L3)).values())
#从上述计数器的键创建一个列表,生成一个唯一项列表
#基本上相同的原始L1,删除了重复项
#值是每个键的计数,这正是L2应该的值
L1,L2=列表(L1_counter.keys()),列表(L1_counter.values())
打印(f'L1为{L1}')
打印(f'L2是{L2}'))
打印(f'L3是{L3}')
输出-

L1 is [10.0, 20.0, 50.0, 100.0]
L2 is [1, 2, 1, 1]
L3 is [0, 0, 0, 1]
注意:这假设-

  • L1
    L2
    L3
    的初始长度相同
  • 如果存在重复值,
    L3
    所有重复值的初始值相同。例如,
    L3
    两个20.000都有0。这不能有什么不同。坦率地说,那是没有道理的。同一事物有两个不同的值

以下是我能想到的最具Python风格的方法-

从集合导入计数器
#初始值
L1=[10.000,20.000,20.000,50.000,100.000]
L2=[1,1,1,1,1]
L3=[0,0,0,0,1]
#创建一个dict,每个键都是唯一的,每个值是给定列表中所述键的出现次数(L1)
L1_计数器=计数器(L1)
#创建一个dict,其中每个键都是唯一的,从L1开始,每个值都是从L3开始的,根据位置交叉引用
#将所述列表的值分配给L3
L3=列表(dict(zip(L1,L3)).values())
#从上述计数器的键创建一个列表,生成一个唯一项列表
#基本上相同的原始L1,删除了重复项
#值是每个键的计数,这正是L2应该的值
L1,L2=列表(L1_counter.keys()),列表(L1_counter.values())
打印(f'L1为{L1}')
打印(f'L2是{L2}'))
打印(f'L3是{L3}')
输出-

L1 is [10.0, 20.0, 50.0, 100.0]
L2 is [1, 2, 1, 1]
L3 is [0, 0, 0, 1]
注意:这假设-

  • L1
    L2
    L3
    的初始长度相同
  • 如果存在重复值,
    L3
    所有重复值的初始值相同。例如,
    L3
    两个20.000都有0。这不能有什么不同。坦率地说,那是没有道理的。同一事物有两个不同的值

L3的具体工作原理是什么?L3包含有关样本(L1)的信息。例如,L3中的值1表示100.000个样本中有1个缺陷。
L3
的具体工作原理是什么?L3包含关于样本(L1)的信息。例如,L3中的值1表示100.000个样品中有1个缺陷。