我有一个使用以下语法的列表:
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]
结尾的list_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]
是另一个可迭代的。
所以我的问题是如何在达到标准的情况下获得输出?
答案 0 :(得分:1)
由于您的input_[i][2]
是一个嵌套(嵌套)列表,因此您需要进行第二次迭代。因此,您需要在理解中遍历每个项目(我称它们为filename
)。您也可以使用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)
两种方法都没什么区别。
答案 1 :(得分:1)
首先不要将Python内置变量用作变量名(代码中的for i in range(0,len(Holidays)-1):
for j in range(0,len(df)-1):
if (Holidays.loc[i,'month']==df.loc[j,'month'] and
Holidays.loc[i,'day']==df.loc[j,'day'] ):
df.loc[j,'Isholiday']=1
else:
df.loc[j,'Isholiday']=0
)。其次,您想要将每个子列表的input
与以item[0]
结尾的子子列表(item[2]
)的项目连接在一起。然后从第2步开始,到第2步。所以您这样做:
"xml"
结果为:
lst = [["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", ...]],
...]
res = []
for k, _, v in lst[2::2]:
catch = next((g for g in v if g.endswith('.xml')), None)
if catch is not None:
res.append(k+catch)
答案 2 :(得分:0)
您的输出不正确,或者我可能理解不正确。...您能解释一下最终结果吗?
此外,在此处关闭括号,“ i”是数字:
count_it
答案 3 :(得分:0)
我了解您想使用一种理解。你去...
data = [["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"]]]
x = ["".join(d[:1] + [s for s in d[2] if ".xml" in s]) for d in data[2::2]]