为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python的嵌套列表中标记匹配项

如何在Python的嵌套列表中标记匹配项

慕容708150 2021-04-08 14:15:45
此处是Python的新手。我目前有一个嵌套列表的列表。我正在尝试标记每个从0-25开始的子列表。但是,如果两个子列表相同,则它们应具有相同的标签。例如:label_list = [['AH0'], ['AA1', 'K', 'S'], ['AH0', 'N', 'T'], ['AA1', 'K', 'S'], ['IH0', 'N'], ['AA1', 'K', 'S']]输出应为 [0, 1, 2, 1, 4, 1]因为第二,第四和第六个子列表是相同的。其余子列表应仅以连续的数字顺序标记。我知道我需要使用一个循环,但是我很困惑,任何人都对如何解决这个问题有任何建议?谢谢你。
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以使用字典:


label_list = [['AH0'], ['AA1', 'K', 'S'], ['AH0', 'N', 'T'], ['AA1', 'K', 'S'], ['IH0', 'N'], ['AA1', 'K', 'S']] 

count = 0

d = {}

for i in label_list:

  if tuple(i) not in d:

    d[tuple(i)] = count

  count += 1


final_result = [d[tuple(i)] for i in label_list]

输出:


[0, 1, 2, 1, 4, 1]

编辑:上面的解决方案假定标签是根据唯一值的首次出现的索引生成的。但是,如果需要一般的增量,并且要根据看到的唯一元素的数量创建标签,则count可以在for循环内移动它:


if tuple(i) not in d:

  d[tuple(i)] = count

  count += 1

然后,输出为[0, 1, 2, 1, 3, 1]。


列表理解也可以使用,尽管效率不高:


c = iter(range(len(label_list)))

new_d = {tuple(a):i for i, a in reversed(list(enumerate(label_list)))}

final_result = [next(c) if a not in label_list[:i] else new_d[tuple(a)] for i, a in enumerate(label_list)]

输出:


[0, 1, 2, 1, 3, 1]


查看完整回答
反对 回复 2021-04-27
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

这是一个单线,只是为了好玩:

 [dict( map( reversed, enumerate( set( map(tuple, label_list)))))[tuple(item)] for item in label_list]

不利的一面(除了难以理解之外)是,它创建字典的次数与label_list中项目的次数相同。

要解释它是如何工作的,请从内而外阅读它:

map(tuple, label_list) 将tuple函数应用(或“映射”)元组函数到label_list的每个元素,以便以后每个元素都可以用作字典中的键(python列表不能是字典键)

set( map(tuple, label_list)) 在label_list中创建一组所有唯一元素,这是我们需要的,因为您希望每个唯一条目都具有唯一标签

enumerate( set( map(tuple, label_list)))枚举是一个将某些列表作为输入并为列表的每个元素返回唯一(按顺序)整数的函数。因此,您得到的是这样的元组列表[[0,element_0),(1,element_1)...]

map( reversed, enumerate( set( map(tuple, label_list))))这会颠倒上面列表中的元素,因此当我们在下一步中创建字典时,元素将是键而不是整数。因此我们得到[[element_0,0),(element_1,0)...]

dict( map( reversed, enumerate( set( map(tuple, label_list)))))只需获取上一步中的元组列表并从中创建一个字典,就可以像访问其他任何字典一样使用它们的键(即使用dictionary[element]语法)。

该行的其余部分与其他任何列表理解一样。它遍历您的原始label_list并访问我们创建的字典以获得与每个元素关联的唯一编号。


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号