Индекс над набором, я получаю два набора, а не один - PullRequest
0 голосов
/ 26 августа 2018

Я думал, что следующий код будет работать так, как я искал.

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

и я не знаю, следует ли мне использовать какую-либо другую команду.

Я очень благодарен за любую помощь, которую я могу получить.Я думал об этом в течение некоторого времени и не смог это исправить.

1 Ответ

0 голосов
/ 27 августа 2018

Неясно, что вы пытаетесь сделать, но простое исправление ошибок не возвращает ожидаемого результата.Используя itertools.product() вместо вложенных для циклов:

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}
...