Я пытаюсь случайным образом перемешать один элемент во вложенном списке списков.
Например, у меня есть:
list1=[[['a', 'b', 'c', 1], ['a', 'b', 'c', 2]], [['a', 'b', 'c', 3], ['a', 'b', 'c', 4]], [['a', 'b', 'c', 5], ['a', 'b', 'c', 6]]]
Я хочу случайным образом перемешать 3-й элемент каждого под- list (float), сохраняя при этом остальные записи списка и их структуру внутри этого вложенного списка. Например, как таковой:
list1=[[['a', 'b', 'c', 1], ['a', 'b', 'c', 6]], [['a', 'b', 'c', 4], ['a', 'b', 'c', 2]], [['a', 'b', 'c', 3], ['a', 'b', 'c', 5]]]
До сих пор я придумал следующее:
import random
list1 = [[['a', 'b', 'c', 1], ['a', 'b', 'c', 2]], [['a', 'b', 'c', 3], ['a', 'b', 'c', 4]], [['a', 'b', 'c', 5], ['a', 'b', 'c', 6]]]
vals = [x[3] for line in list1 for x in line]
shuffled_vals = random.sample(vals,len(vals))
counter = 0
for i in range(len(list1)):
for j in range(len(list1[i])):
list1[i][j][3] = shuffled_vals[counter]
counter += 1
Хотя это работает как намерение, мне было бы любопытно, есть ли еще элегантное / Pythoni c решение. Кроме того, я не уверен, насколько хорошо это масштабируется - список, который я собираюсь использовать, будет содержать несколько миллионов записей.
Любые советы по улучшению этого кода (до более Pythoni c или более эффективного ) очень признательны.