python - 索引一组,我得到两组而不是一组
问题描述
我认为下面的代码会按照我预期的方式工作。
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}
推荐阅读
- go - 如果其中一项要求是 +incompatible,则在 go.mod 中获取最新版本
- search - 在文件中有效地搜索/grep
- python - 关于函数调用的选择排序的一个问题?(python数组)
- shippo - 如果我在请求中指定运营商帐户,为什么会收到“运营商不存在”?
- docker - swarm 证书已过期
- python - 熊猫,如果值在列中,则更改为另一列
- python - 为什么这个程序会抛出错误?
- ajax - 带有 BI4.2 SP6 的 Jmeter - Ajax 请求 - 403 错误
- c# - 如何处理/关闭“TiffBitmapDecoder”流
- flutter - 如何将包添加到颤振项目中?