Python 如何将索引的平面列表转换为列表列表?
给定一个列表列表,其中列表的数量和其中的元素数量是可变的。例如:Python 如何将索引的平面列表转换为列表列表?,python,python-3.x,Python,Python 3.x,给定一个列表列表,其中列表的数量和其中的元素数量是可变的。例如: import random import string bar = lambda: [random.choice(string.ascii_letters) for _ in range(random.randint(1,5))] branches = [bar() for _ in range(4)] >>> branches [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J
import random
import string
bar = lambda: [random.choice(string.ascii_letters) for _ in range(random.randint(1,5))]
branches = [bar() for _ in range(4)]
>>> branches
[['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
我想知道是否有一种更简洁的方法来创建一个元组列表,对列表进行索引。比这更简洁的东西:
nodes = []
for branch in range(len(branches)):
for node in range(len(branches[branch])):
nodes.append((branch, node))
>>> nodes
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
这不能用列表来完成吗?我只是有点麻烦,我相信有一个脑力劳动者拿着一把大锤子
最终目标是随机访问每个节点一次,并且只访问一次,并且在访问期间,准确地知道当前节点在全局中的位置。因此,我将结果随机洗牌。洗牌(节点)并使用元组在其上循环,以通过分支[node[0]][node[1]]访问原始列表。欢迎提出更好的想法。该功能允许您轻松访问每个元素的索引和值
>>> branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
>>> [(idx, id) for idx,val in enumerate(branches) for id,v in enumerate(val)]
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
该函数允许您轻松访问每个元素的索引和值
>>> branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
>>> [(idx, id) for idx,val in enumerate(branches) for id,v in enumerate(val)]
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
该函数允许您轻松访问每个元素的索引和值
>>> branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
>>> [(idx, id) for idx,val in enumerate(branches) for id,v in enumerate(val)]
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
该函数允许您轻松访问每个元素的索引和值
>>> branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
>>> [(idx, id) for idx,val in enumerate(branches) for id,v in enumerate(val)]
[(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
如果目标是随机迭代每个项目:
import random
l = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
l2 = [x for y in l for x in y]
random.shuffle(l2)
如果目标是随机迭代每个项目:
import random
l = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
l2 = [x for y in l for x in y]
random.shuffle(l2)
如果目标是随机迭代每个项目:
import random
l = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
l2 = [x for y in l for x in y]
random.shuffle(l2)
如果目标是随机迭代每个项目:
import random
l = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
l2 = [x for y in l for x in y]
random.shuffle(l2)
确实不需要枚举:
In [1]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i in range(len(branches)) for j in range(len(branches[i]))]
Out[1]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
或者至少两种情况都不是:
In [2]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i,branch in enumerate(branches) for j in range(len(branch))]
Out[2]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
确实不需要枚举:
In [1]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i in range(len(branches)) for j in range(len(branches[i]))]
Out[1]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
或者至少两种情况都不是:
In [2]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i,branch in enumerate(branches) for j in range(len(branch))]
Out[2]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
确实不需要枚举:
In [1]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i in range(len(branches)) for j in range(len(branches[i]))]
Out[1]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
或者至少两种情况都不是:
In [2]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i,branch in enumerate(branches) for j in range(len(branch))]
Out[2]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
确实不需要枚举:
In [1]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i in range(len(branches)) for j in range(len(branches[i]))]
Out[1]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
或者至少两种情况都不是:
In [2]: branches = [['t'], ['S', 't'], ['Q'], ['M', 'a', 'J', 'x', 'Y']]
[(i, j) for i,branch in enumerate(branches) for j in range(len(branch))]
Out[2]: [(0, 0), (1, 0), (1, 1), (2, 0), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
嵌套的for循环可以编写为列表理解:
[(分支,节点)用于范围内的分支(len(分支))用于范围内的节点(len(分支[branch])]
。嵌套的for循环可以编写为列表理解:[(分支,节点)用于范围内的分支(len(分支))用于范围内的节点(len(分支[branch])]
。嵌套的for循环可以编写为列表理解:[(分支,节点)用于范围内的分支(len(branchs))用于范围内的节点(len(branchs[branch])]
。嵌套的for循环可以编写为列表理解:[(分支,节点)用于范围内的分支(len(branchs))用于范围内的节点(len(branchs[branch])]
。在这些节点上随机迭代,但使用当前节点的标记在其上随机迭代,但使用当前节点的标记在其上随机迭代,但使用当前节点的标记在其上随机迭代,但使用当前节点的标记