一组索引,我得到两套而不是一套
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}
我认为下面的代码会按照我预期的方式工作。
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}