python - 如何一次将两个项目添加到列表中
问题描述
我有一个像这样的简单 for 循环:
for i in range(3):
if i == 1:
for x in [0, 2]:
free_spots.append([x, i])
else:
free_spots.append([1, i])
输出这个列表
[[1, 0], [0, 1], [2, 1], [1, 2]]
我计划像这样将其转换为列表理解,但遇到了一个问题:
[[x, i] for x in [0, 2] if i == 1 else [1, i] for i in range(3)]
这会导致错误,我尝试像这样修复它:
[[[x, i] for x in [0, 2]] if i == 1 else [1, i] for i in range(3)]
虽然现在运行它也创建了这个:
[[1, 0], [[0, 1], [2, 1]], [1, 2]]
我不希望项目 2 和 3 一起出现在一个列表中。有可能做这样的事情吗?:
[[0,i],[2,i] if i == 1 else [1, i] for i in range(3)]
解决方案
如果你真的想在一行中做到这一点,这个怎么样?
free_spots = [val for sublist in [([[x, i] for x in [0,2]] if i == 1 else [[1, i]]) for i in range(3)] for val in sublist]
# This effectively creates a list of lists containing the values you want
main_list = [([[x, i] for x in [0,2]] if i == 1 else [[1, i]]) for i in range(3)]
# And then flattens it
free_spots = [val for sublist in main_list for val in sublist]
但其他人是对的。除非您有充分的理由,否则这不是一个好主意。现在我几乎无法理解我自己的代码,因为我已经编写了不是 python zen 的代码。
推荐阅读
- salesforce - 如何在 .csv 中格式化 HTML 以导入增强动态内容 - SFMC
- matlab - MATLAB vs Numpy 乘法问题
- java - while循环条件说明
- vb.net - 如何在 DataGridViewComboBoxColumn 中添加空白字段
- macos - 尽管使用了 sudo,但打开 /dev/rdisk0 仍会出现“不允许操作”错误
- android - adb 不是内部或外部命令、可运行程序或批处理文件
- java - IGV 在 Mac 上崩溃
- javascript - Vue CLI 3 vue.config.js 与 webpack.config.js 的插件
- linux - Linux 命令 `file` 如何识别我的文件的编码?
- composer-php - 在 OS Catalina 上安装 PHP Composer