首页 > 解决方案 > 索引一组,我得到两组而不是一组

问题描述

我认为下面的代码会按照我预期的方式工作。

p1 = [
    ({1}, (0,0)),
    ({2}, (0,0)),
    ({3},(0,0),
]
p2 = [
    ({1,2}, (1,0)),
    ({3}, (0,0)),
]
for k in range(len(p1)):
    m = set()
    for l in range(len(p2)):
        if p1[k] != p2[l]:
           m = m.union(
               set([min(p1[k][0])]))
    print(m)

我应该得到的是{1,2},但我得到了

Set([1])
Set([2])

我还收到一条错误消息:

'set' object does not support indexing

而且我不知道我是否应该使用其他命令。

我真的很感激我能得到的任何帮助。我已经考虑了一段时间,但无法解决这个问题。

标签: pythonpython-3.xsetunions

解决方案


目前尚不清楚您要做什么,但仅修复错误不会返回您预期的输出。使用itertools.product()而不是嵌套的 for 循环:

p1=[({1}, (0,0)), ({2}, (0,0)), ({3}, (0,0))]
#                                  ^^^^ a tuple now
p2=[({1,2}, (1,0)), ({3}, (0,0))]

In []
import itertools as it

m = set()
for k, l in it.product(p1, p2):
    if k != l:
        m.add(min(k[0]))
print(m)

Out[]:
{1, 2, 3}

做一个很大的假设,但如果你打算同时浏览这些列表,你会使用zip(p1, p2),例如:

In []:
m = set()
for k, l in zip(p1, p2):
    if k != l:
        m.add(min(k[0]))
print(m)

Out []:
{1, 2}

推荐阅读