Как сравнить один элемент с другими элементами в списке - PullRequest
1 голос
/ 21 января 2020

У меня есть список x = [a, b, c, d].

Я хочу сравнить:

  1. Первый элемент a с b, c и d.
  2. Второй элемент b с a, c и d.
  3. Третий элемент c с a, b и d.
  4. Четвертый элемент d с a, b и c.

Это метод, который я использовал, но он не работает так, как я хочу:

for i in len(x):
    for j in range(i+1, len(x)):
        Compare(x[i], y[j])

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Глупая ошибка, вы забыли напечатать сравнение. Вот решение:

For i in len(x):
 For j in range(i+1, len(x)):
  print(Compare(x[i], y[j]))
0 голосов
/ 21 января 2020

Это выглядит как хорошее место для использования itertools .

for i in list(itertools.permutations(x, 2)):
    print("Compare {0} with {1}".format(*i))

"""    
Compare a with b
Compare a with c
Compare a with d
Compare b with a
Compare b with c
Compare b with d
Compare c with a
Compare c with b
Compare c with d
Compare d with a
Compare d with b
Compare d with c
"""

Если a == b и b == a, то вы можете использовать комбинации, чтобы получить отличные пары:

for i in list(itertools.combinations(x, 2)):
    print("Compare {0} with {1}".format(*i))

"""
Compare a with b
Compare a with c
Compare a with d
Compare b with c
Compare b with d
Compare c with d
"""
0 голосов
/ 21 января 2020
for i in range(len(x)):
    for el in x[:i] + x[(i+1):]:
        print("Compare {} with {}".format(x[i], el))
        # or: Compare(x[i], el)
"""
Output:
Compare a with b
Compare a with c
Compare a with d
Compare b with a
Compare b with c
Compare b with d
Compare c with a
Compare c with b
Compare c with d
Compare d with a
Compare d with b
Compare d with c
"""

Как функция:

def exclusive_compare(l, comparefun):
    return [comparefun(l[i], el) for el in l[:i] + l[(i+1):] for i in range(len(l))]

exclusive_compare(l, lambda x, y: (x, y))

Out[9]: 
[('a', 'b'),
 ('a', 'c'),
 ('a', 'd'),
 ('b', 'a'),
 ('b', 'c'),
 ('b', 'd'),
 ('c', 'a'),
 ('c', 'b'),
 ('c', 'd'),
 ('d', 'a'),
 ('d', 'b'),
 ('d', 'c')]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...