Python 索引一个集合,我得到两个集合,而不是一个
我认为下面的代码将以我所表达的方式工作Python 索引一个集合,我得到两个集合,而不是一个,python,python-3.x,set,unions,Python,Python 3.x,Set,Unions,我认为下面的代码将以我所表达的方式工作 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(
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
我不知道我是否应该使用其他命令
我真的很感激能得到的任何帮助。我已经考虑了一段时间,但无法解决此问题。不清楚您试图做什么,但仅仅解决错误并不会返回预期的输出。使用
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}
将
m=set()
和print(m)
移动到for循环之外。这不会解决set
不支持索引的事实。不清楚您希望如何合并集合,请提供一个简短的解释。正确,集合不支持索引的问题是因为p1
-({3})中的最后一个条目不是元组,因此p1[2][0]
将抛出错误。大概这应该是一个元组,例如,({3},)
,它可以修复错误。哦,对不起,我没有注意到我在那里做了更改,但是是的,这就是为什么我在代码中找不到错误的原因。。抱歉,您的元组更正缺少结束参数