Создание списка из 2 элементов списка, выбранных случайным образом в Python

У меня есть список кортежей, и внутри этого кортежа у меня есть 2 списка. Это выглядит примерно так:

value=[(['55', '56', '57', '58', '2'], ['59', '60', '61', '62', '2']), (['63', '64', '65', '66', '2'], ['51', '52', '53', '54', '2'])]

Из двух списков каждого кортежа я хочу создать список, который также будет иметь одинаковую длину (в приведенном выше примере длину 5), и я хочу сделать это для каждого кортежа во внешнем списке. Например, в приведенном выше примере первое значение первого конечного списка будет либо 55, либо 59, второе значение конечного списка будет либо 56, либо 60 и так далее.

Одним из возможных результатов будет:

['59', '60', '57', '58', '2'] и ['63', '52', '53', '66', '2']

Как мне это сделать?

случайный
Kraigolas 10.04.2022 19:00
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
1
34
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Каждый кортеж внутри values содержит два списка. Первый список имеет индекс 0, второй список имеет индекс 1.

Мы можем использовать random.randint(0, 1) для генерации двоичного выбора, либо 0, либо 1, который будет индексом списка, в котором мы выбираем элемент.

import random
res = [[v[random.randint(0, 1)][k] for k in range(len(v[0]))] for v in value]

Давайте разберем синтаксис понимания списка:

  • Сначала мы перебираем кортежи, содержащиеся в value, с помощью for v in value.
  • Затем с помощью for k in range(len(v[0])) мы перебираем количество элементов первого списка каждого кортежа (первый или второй здесь не имеет значения, так как оба списка имеют одинаковое количество элементов).
  • Затем с помощью v[random.randint(0, 1)][k] мы случайным образом выбираем первый или второй список и из этого списка извлекаем k-е значение.

Можете ли вы объяснить немного, пожалуйста!

Dev 10.04.2022 19:11

Готово, прочитайте обновленный ответ.

Davide_sd 10.04.2022 19:19

Да, теперь я правильно понял код. Спасибо!

Dev 10.04.2022 19:25

Вы можете использовать zip() с оператором распаковки, чтобы получить варианты для каждой позиции в подсписке, а затем использовать понимание списка, чтобы выполнить эту операцию для каждого кортежа в исходном списке. Примечательно, что использование распаковки делает эту операцию расширяемой, если у вас есть переменное количество списков внутри каждого кортежа:

import random
[[random.choice(choices) for choices in zip(*item)] for item in value]

С заданными данными вы получите вывод, например:

[['55', '60', '61', '62', '2'], ['51', '52', '65', '66', '2']]

Другие вопросы по теме