python - 具有嵌套列表、if 语句和范围步骤的列表理解
问题描述
我有一个具有以下语法的列表:
list_in = [["Text1","", ["Text2.xml", "Text2.png", ...]],
["Text3", "", ["Text4.xml", "Text4.png", ...]],
["Text5","", ["Text6.xml", "Text6.png", ...]],
["Text7", "", ["Text8.png", "Text8.xml", ...]],
["Text9", "", ["Text10.png", "Text10.xml", ...]],
...]
我想要的输出是一个list_in[i][0]
与list_in[i][2]
iflist_in[i][2]
连接的列表,".xml"
以 list_in[2] 开始,遵循 2 的步骤。
给定上面的例子:list_out = ["Text5Text6.xml", "Text9Text10.xml"]
我尝试了以下代码:
list_out = [list_in[i][0] + list_in[i][2] for i in range(2, len(input), 2) if i.endswith(".xml")]
但它不起作用,因为它list_in[i][2]
是另一个可迭代的。所以我的问题是如何在给定标准的情况下获得输出?
解决方案
input_[i][2]
由于您是嵌套(嵌套)列表,因此您需要在理解中进行第二次迭代。filename
因此,您需要在您的理解中遍历每个项目(我将它们称为s)。您还可以使用 for 循环遍历它们。
一些小错误包括后面缺少括号i.endswith(".xml"
,因为i
是int
,所以它没有endswith
功能。
>>> output = [input_[i][0] + filename
for i in range(2, len(input_), 2)
for filename in input_[i][2]
if filename.endswith(".xml")]
>>> output
['Text5Text6.xml', 'Text9Text10.xml']
正如我之前提到的,不要input
用作变量名。我使用input_
它只是为了清楚这一点。
这是一个纯粹的单行黑客(或多行,如果你选择)。如果您希望选择更具可读性的内容,请考虑将您的理解分解为循环块。
output = []
for i in range(2, len(input_), 2):
for filename in input_[i][2]:
if filename.endswith(".xml"):
output.append(input_[i][0] + filename)
两种方式都没有太大区别。
推荐阅读
- java - findViewByID 中的变量 - Android Studio - Java
- cmake - 为什么 CMake find_package 忽略链接器标志?
- dicom - 如何从所需的 DICOM 标签中得出每次旋转的切片数?
- python - 全局关键字未反映
- reactjs - 从另一个反应组件调用反应组件内的方法
- axapta - 在 AX 2012 x++ 中创建常规日记帐时刷新固定资产的价值模型
- html - Bootstrap 4 间距
- python - 为什么我在绘制饼图时遇到问题?
- python - Python:如何将函数结果输出到数据框
- c - dev c++和在线编译器有什么区别?