【问题标题】:Find unique elements in the lists of lists of objects in Python在 Python 中的对象列表中查找唯一元素
【发布时间】:2023-03-16 17:44:01
【问题描述】:

我有 Python 中的对象列表。每个对象都包含自己的列表。该列表包含该对象的一些类别。每个列表正好包含 15 个元素(可以是字母、数字或符号 -),例如。

['A', 'A', '1', '-', ... , 'B'] or ['-', 'C', 'X', '-', ... , 'D']

我的目标是为列表中的每个类别或更准确地找到每个位置的唯一值,最好以字典的形式存储,例如:

{0: {'A', '-'} 1: {'A', 'C'} ... }

所以我需要遍历列表中的所有对象并保存这些唯一值。有没有办法以优雅、pythonic 的方式做到这一点?

感谢所有回答。

【问题讨论】:

  • 你能给出一些示例输入和预期输出吗?另外,请说明你最初的方法是什么,你在哪里卡住了?
  • @DanielHao 实际输入与问题中的输入非常相似(只是字母可能略有不同)。每个列表恰好包含 15 个元素(可以是字母、数字或符号 -),每个元素代表一个类别的状态。所以预期的输出也很相似,只是它可能包含更多的字符。我知道如何遍历每个对象,但我不知道如何遍历对象列表并仅存储每个类别的唯一记录。
  • 从您的示例中不清楚为什么会得到这个结果:{0: {'A', '-'} ... } 'A' 不是原始列表中的唯一项目:[ 'A', 'A', '1', '-', ... , 'B']?!
  • 是的,抱歉,该元素在列表本身中不必是唯一的。列表中的元素按给定顺序存储,并且仅在它们的位置上必须是唯一的。所以在第一个位置有唯一的符号“A”和“-”。第二个位置有独特的元素'A'和'C'等。希望现在更清楚。

标签: python list dictionary unique


【解决方案1】:

您可以使用zip 将对象位置配对

>>> a=['A', 'A', '1', '-', 'B']
>>> b=['-', 'C', 'X', '-', 'D']
>>> list(zip(a,b))
[('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D')]
>>> 

要从您的示例中获取该字典,您可以将 enumerate 添加到组合中

>>> dict(enumerate(zip(a,b)))
{0: ('A', '-'), 1: ('A', 'C'), 2: ('1', 'X'), 3: ('-', '-'), 4: ('B', 'D')}
>>> 

要获得唯一的这样的对,您可以使用 set 删除重复项

>>> c=['A', 'A', '1', '-', 'B', 'A', 'A', '1', '-', 'B']
>>> d=['-', 'C', 'X', '-', 'D', '-', 'C', 'X', '-', 'D']
>>> list(zip(c,d))
[('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D'), ('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D')]
>>> set(zip(c,d))
{('A', '-'), ('1', 'X'), ('A', 'C'), ('-', '-'), ('B', 'D')}
>>> 

【讨论】:

  • 谢谢,我试试。是否可以在多个列表或仅两个列表上使用 zip?
  • 您可以将zip 与任意数量的列表一起使用
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2019-11-11
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多