Python 对列表的列表进行计数并将其与另一个列表关联

Python 对列表的列表进行计数并将其与另一个列表关联,python,Python,我会尽力解释我的情况 我有一张名单,上面有名字 name_list = ["Bob" , "Henry" , "Jeff" , "Harry"] 和另一个包含数字的列表 number_list = ["1,4,2,3" , "4,3,1,2" , "3,2,4,1" , "1,2,3,4" , "4,3,2,1" , "1,2,4,3"] 我正在努力想出一个代码,它将创建一个排序计数,将每个名称与其在名称列表中的相应位置相关联 即 这真的可以实现吗?因为我想我已经陷入了死胡同一段时间了,我

我会尽力解释我的情况

我有一张名单,上面有名字

 name_list = ["Bob" , "Henry" , "Jeff" , "Harry"]
和另一个包含数字的列表

number_list = ["1,4,2,3" , "4,3,1,2" , "3,2,4,1" , "1,2,3,4" , "4,3,2,1" , "1,2,4,3"]
我正在努力想出一个代码,它将创建一个排序计数,将每个名称与其在名称列表中的相应位置相关联

这真的可以实现吗?因为我想我已经陷入了死胡同一段时间了,我急需帮助。我对该代码的思考过程是统计每个数字出现的次数,然后(因为该代码用于即时决选投票系统)确定谁的1次计数最高,以此类推

这是即时决选投票代码的一部分,关于我是否在正确的轨道上的任何信息都是非常可取的

您可以尝试以下方法:

name_list = ["Bob" , "Henry" , "Jeff" , "Harry"]
number_list = ["1,4,2,3" , "4,3,1,2" , "3,2,4,1" , "1,2,3,4" , "4,3,2,1" , "1,2,4,3"] 
new_number_list = [list(map(int, i.split(","))) for i in number_list]
final_data = {a:{c:sum(d[i] == c for d in [e for e in new_number_list if e != a]) for c in new_number_list[i]} for i, a in enumerate(name_list)}
输出:

{'Bob': {1: 3, 2: 0, 3: 1, 4: 2}, 'Jeff': {1: 1, 2: 2, 3: 1, 4: 2}, 'Harry': {1: 2, 2: 1, 3: 2, 4: 1}, 'Henry': {1: 0, 2: 3, 3: 2, 4: 1}}
{'Henry': [(1, 0), (2, 3), (3, 2), (4, 1)], 'Bob': [(1, 3), (2, 0), (3, 1), (4, 2)], 'Harry': [(1, 2), (2, 1), (3, 2), (4, 1)], 'Jeff': [(1, 1), (2, 2), (3, 1), (4, 2)]}
编辑:要对所有值进行排序,可以使用以下命令:

new_final_data = {a:sorted(b.items(), key=lambda x:x[0]) for a, b in final_data.items()}
输出:

{'Bob': {1: 3, 2: 0, 3: 1, 4: 2}, 'Jeff': {1: 1, 2: 2, 3: 1, 4: 2}, 'Harry': {1: 2, 2: 1, 3: 2, 4: 1}, 'Henry': {1: 0, 2: 3, 3: 2, 4: 1}}
{'Henry': [(1, 0), (2, 3), (3, 2), (4, 1)], 'Bob': [(1, 3), (2, 0), (3, 1), (4, 2)], 'Harry': [(1, 2), (2, 1), (3, 2), (4, 1)], 'Jeff': [(1, 1), (2, 2), (3, 1), (4, 2)]}

我将这样做,我不确定您是否需要函数,因为您没有指定

from collections import Counter
from itertools import chain

# first lets create a list of dictionaries mapping each name to a number
maps = [dict(zip(name_list, chunk.split(','))) for chunk in number_list]

[{'Bob': '1', 'Harry': '3', 'Henry': '4', 'Jeff': '2'},
 {'Bob': '4', 'Harry': '2', 'Henry': '3', 'Jeff': '1'},
 {'Bob': '3', 'Harry': '1', 'Henry': '2', 'Jeff': '4'},
 {'Bob': '1', 'Harry': '4', 'Henry': '2', 'Jeff': '3'},
 {'Bob': '4', 'Harry': '1', 'Henry': '3', 'Jeff': '2'},
 {'Bob': '1', 'Harry': '3', 'Henry': '2', 'Jeff': '4'}]

for name in name_list:
    temp = Counter()
    # counter object where name is the key, value is another counter object
    temp.update({name: Counter(map(lambda x: x.get(name), maps))})
    num = len(temp.values()[0].keys())
    # create string to format
    fmt = '{} has {} occurences, ' * num
    print '{} - '.format(name) + fmt.format(*list(chain.from_iterable(temp.values()[0].items())))

Bob - 1 has 3 occurences, 3 has 1 occurences, 4 has 2 occurences, 
Henry - 3 has 2 occurences, 2 has 3 occurences, 4 has 1 occurences, 
Jeff - 1 has 1 occurences, 3 has 1 occurences, 2 has 2 occurences, 4 has 2 occurences, 
Harry - 1 has 2 occurences, 3 has 2 occurences, 2 has 1 occurences, 4 has 1 occurences,

我认为“没有什么是不可能的”。谢谢你的回复!我的问题的实际意思是,在新的\u最终\u数据中,我希望统计1出现在数字\u列表中的位置0上,然后2出现在数字\u列表中的位置0上。。。etc然后对编号列表中的位置1重复此操作,以便出现1 etc@H.Y,因此您需要每个编号在
编号列表中的每个编号的当前位置出现的次数
?是!!这正是我的意思。如果可能的话,你能在没有任何导入函数的情况下完成吗?@H.Y当然可以:)不过,只有一个问题。在编号列表的第一个元素“1,4,2,3”中,两个出现在第二个索引处。然而,“4,3,2,1”也存在于列表中,在第二个索引处包含2。但是,您将符号标记为“2:0”。有什么原因吗?我问题的措辞很糟糕。很抱歉,数字列表中的每个元素都对应于名称列表。所以“Bob”在名称列表中的位置为0。我希望以某种方式清点位于0位置的每个数字,以便对数字列表进行清点。位置0有3个1,位置0有0个2,位置0有1个3,位置0有2个4我很抱歉。我误读了你之前的问题,我只是很兴奋它可以做到!