Python: сочетание с критериями

У меня есть следующий список комбинаций:

a = [(1,10), (2,8), (300,28), (413,212)]

b = [(8,28), (8,15), (10,21), (28,34), (413,12)]

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

А. Список a и список b имеют общие элементы.

  • Второй элемент кортежа в списке a равен первому элементу кортежа в списке b.
  • Комбинация списка a и списка b должна образовать новую комбинацию:

    d = [(1,10,21), (2,8,28), (2,8,15), (300,28,34)]

    • All other tuples in both lists which do not satisfy the criteria get ignored.

ВОПРОСЫ

  1. Могу ли я выполнить эту комбинацию критериев с помощью itertools?

  2. Какой самый элегантный способ решить эту проблему с использованием модулей или без них?

  3. Как можно отобразить вывод в листе Excel для отображения каждого элемента кортежа в списке d в отдельном столбце, например:

    d = [(1,10,21), (2,8,28), (2,8,15), (300,28,34)] отображается в Excel как:

Столбец A = [1, 2, 2, 300]

Столбец B = [10,8,8,28]

Столбец C = [21,28,15,34]


person user7970547    schedule 05.05.2017    source источник
comment
Вы что-нибудь пробовали?   -  person rafaelc    schedule 06.05.2017
comment
Пробовали itertools, но не смогли найти подходящий вариант критериев. Выполнение цикла for не работает. Пока я генерирую csv-файл вывода, а затем копирую и вставляю его в Excel. k = list (itertools.product (b, c)) импортировать csv с open ('Combination.csv', 'a') как csv_file: csv_app = csv.writer (csv_file) csv_app.writerow (k) '' '   -  person user7970547    schedule 06.05.2017


Ответы (1)


pandas работает как шарм для excel.

Вот код:

a = [(1,10),(2,8),(300,28),(413,212)]

b = [(8,28), (8,15),(10,21),(28,34),(413,12)]

c = [(x, y, t) for x, y in a for z, t in b if y == z]

import pandas as pd

df = pd.DataFrame(c)
df.to_excel('MyFile.xlsx', header=False, index=False)
person zipa    schedule 05.05.2017
comment
Спасибо. Это было здорово! - person user7970547; 06.05.2017