Итак, я получил этот список списков:
lst = [[0,1],2,[3]]
и я получил список кортежей:
lst_2 = [("x1","y1"),("x2","y2"), ("x3","y3"), ("x4","y4")]
Я хочу заменить значения внутри lst значением индекса 0 каждого из кортежей в lst_2, а взятый кортеж зависит от числового значения в lst. Так становится:
lst = [["x1","x2"], "x3", ["x4"]]
Пожалуйста, не поджаривайте меня, большое спасибо
Что делать, если количество значений не соответствует? Что, если в первом списке есть числа, которые не являются индексами во втором списке? Что делать, если первый список более глубоко вложен? Пожалуйста, объясните все правила, которые необходимо учитывать, чтобы охватить пограничные случаи.
Попробуй это:
lst = [[0,1],2,[3]]
lst_2 = [("x1","y1"),("x2","y2"), ("x3","y3"), ("x4","y4")]
res = []
for l in lst:
if isinstance(l, list):
res += [[lst_2[i][0] for i in l]]
else:
res += [lst_2[l][0]]
print(res)
Или с Пониманием списка:
res = [[lst_2[i][0] for i in l] if isinstance(l, list) else lst_2[l][0] for l in lst]
[['x1', 'x2'], 'x3', ['x4']]
@rose, пожалуйста, если у вас есть вложенный список, я рекомендую использовать trincot_answer. Я хочу добавить рекурсивную версию к моему ответу, который я вижу trincot
написал это;)
Вы можете использовать рекурсию, чтобы позволить lst
иметь более глубокие уровни вложенности:
def produce(template, data):
return [
produce(nested, data) for nested in template
] if isinstance(template, list) else data[template][0]
# Example
lst = [[0,[1]],2,[3]]
lst_2 = [("x1","y1"),("x2","y2"), ("x3","y3"), ("x4","y4")]
result = produce(lst, lst_2)
большое спасибо, теперь у меня есть идея для формы рекурсии, спасибо!!
какие условия необходимы для заполнения lst_2 ?