一组索引,我得到两套而不是一套

Index over a set, I get two sets and not one

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

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

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

我非常感谢能得到的任何帮助。想了很久也没能解决这个问题

不清楚您要做什么,但仅仅修复错误并没有 return 您预期的输出。使用 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}