Py学习  »  Python

从Python中随机选择的两个列表元素创建列表

dev • 3 年前 • 1694 次点击  

我有一个元组列表,在这个元组中,我有两个列表。它看起来像下面这样:

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

从每个元组的2个列表中,我想创建一个长度相同的列表(在上面的例子中,长度为5),我想为外部列表中的每个元组创建一个列表。例如,在上述示例中,第一个最终列表的第一个值将是55或59,最终列表的第二个值将是56或60,依此类推。

一个可能的结果是:

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

我该怎么做?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131495
文章 [ 2 ]  |  最新文章 3 年前
Davide_sd
Reply   •   1 楼
Davide_sd    3 年前

里面的每个元组 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个值。
BrokenBenchmark
Reply   •   2 楼
BrokenBenchmark    3 年前

你可以用 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']]