python - 将列表理解转换为简单的 for 循环
问题描述
我有一个列表理解,它返回所有可能排列的列表,因为输入包含所有唯一数字。
nums = [1,2,3]
ans = [[]]
for x in nums:
ans = [items + [n] for items in ans for n in nums if (n not in items)]
print(ans)
> [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
我试图为这一切编写for循环:
nums = [1, 2, 3]
ans = [[]]
for x in nums:
for items in ans:
for n in nums:
if n not in items:
items.append(n)
print(ans)
但是,这并没有给我所需的输出。谁能帮我这个?
解决方案
[items + [n] for items in ans for n in nums if (n not in items)]
让我们分解一下,从右到左。
for items in ans:
for n in nums:
if n not in items:
然后你只需创建一个列表并将这些添加items + [n]
到其中
result = []
for items in ans:
for n in nums:
if n not in items:
result.append(items + [n])
现在这整个事情是从另一个循环内部执行的for x in nums
。所以你有了:
nums = [1,2,3]
ans = [[]]
for x in nums:
result = []
for items in ans:
for n in nums:
if n not in items:
result.append(items + [n])
ans = result
推荐阅读
- python - matplotlib 动画将奇怪的框添加到 MPEG 中的绘图角落
- python - 带有 2D numpy 数组输入的 Tensorflow Keras Conv2D 错误
- ios - 用于更改标签文本的 Swift 按钮操作不起作用
- php - User.php boot() 方法在用户注册时被多次调用
- mysql - 如果所选日期没有可用数据,则查询打印 null
- java - 如何从另一个活动访问抽屉
- javascript - 通过查询或从 Vue 中的存储发送数据
- r - 使用 R 选择具有最高值的列
- javascript - Chrome 扩展程序如何“侦听”主机页面上的所有 iFrame 以完成加载?
- mongodb - MongoDB 喜欢(upvote)和不喜欢(downvote)模式设计