Python 检查项目是否在不同的集合中,并将它们合并

标签 python list set

假设L = [{'C', 'T'}, {'L'}, {'M'}]

c1 = 'C' 且 c2 = 'M'

如果 c1 和 c2 位于不同的集合中,我想合并。

我如何检查“C”与“M”位于不同的集合中,以便我可以有效地将其合并。我试图避免多重循环。 (如果 c1 和 c2 在同一组中,则不执行任何操作)

对于此示例,输出为:[{'C', 'T', 'M'}, {'L'}]

最佳答案

第一步是找到包含“C”和“M”的两个集合。这是使用生成器表达式来执行此操作的解决方案:

try:
    i1 = next(i for i, values in enumerate(L) if 'C' in values)
    i2 = next(i for i, values in enumerate(L) if 'M' in values)
except StopIteration:  # "C" or "M" wasn't found
    pass
else:    
    if i1 != i2:
        set1 = L[i1]
        set1.update(L.pop(i2))

在我看来,这是一个很好且可读的解决方案,但如果您确实想要避免对数据进行两次循环,则可以将两个生成器表达式合并到一个循环中:

i1 = i2 = None
for i, values in enumerate(L):
    if 'C' in values:
        i1 = i

    if 'M' in values:
        i2 = i

    if i1 is not None and i2 is not None:
        if i1 != i2:
            set1 = L[i1]
            set1.update(L.pop(i2))
        break

两种解决方案都就地修改了L。他们不会创建新列表。

关于Python 检查项目是否在不同的集合中,并将它们合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351717/

相关文章:

python - 动态表 mysqldb python string/int 问题

python代码简化及解释

arrays - 如何在 Elm 中获取数组/列表中给定元素的第一个索引?

python - 在 python 中使用 id() 比较列表(整数)

list - 如何比较haskell列表中的内容,看看它们是否部分相同?

c++ - 无法从一种数据类型转换为相同的数据类型?

python - 如何在组中计算特定值?

python - 将字典中的值转换为键

python - 当我尝试将 excel 文件转换为列表时,“DataFrame”对象没有属性 'tolist'

javascript - 以编程方式设置 dijit NumberSpinner 值