Предположим, у нас есть следующие списки:
t0=[('soybean','apple','banana', 'vegetable_oil'), ('soybean','bay','milk', 'smoke','orange'), ('cream','gelatin', 'watermelon')]
t1=[('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]
t2=['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
Для каждого элемента в t1
я хочу пройти через t0
и заменить строки строками в t2
, чтобы я получил:
[[('apple','banana', 'soybean:vegetable_oil'), ('soybean','bay','milk', 'smoke','orange'), ('cream','gelatin', 'watermelon')],
[('soybean','apple','banana', 'vegetable_oil'), ('soybean','bay:smoke','milk','orange'), ('cream','gelatin', 'watermelon')],
[('soybean','apple','banana', 'vegetable_oil'), ('soybean','bay','milk', 'smoke','orange'), ('cream','gelatin:watermelone')]]
Mathematica имеет функцию для выполнения такой операции, которая называется OrderlessPatternSequence
Интересно, как можно сделать это в Python?
ОБНОВЛЕНИЕ: Более простой пример:
Пусть:
l0=[('a','b','c'),('d','e','f','g'),('b','d')]
у нас также есть
l1=[('a','c'),('e','g')]
и
l2=['a:c','e:g']
l0
имеет два элемента, я хочу пройти через каждый элемент, и если ('a','c')
или ('e','g')
из l1
появятся в нем вместе, я заменю их на 'a:c'
и 'e:g'
на каждой итерации. Поэтому мне нужно пройти ДВА раза по l0
один раз, чтобы проверить, есть ли у меня ('a','c')
где-нибудь, и один раз, чтобы посмотреть, есть ли у меня ('e','g')
поэтому вывод будет
[[('a:c','b'),('d','e','f','g'),('b','d')],
[('a','b','c'),('d','e:g','f'),('b','d')]]