Skip to main content
 首页 » 编程设计

python之如何为嵌套列表中的特定字符串创建子列表

2025年05月04日20powertoolsteam

我有 Python 嵌套列表,我正在尝试组织它并最终计算出现的次数。嵌套列表如下所示:

[['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'],...] 

我首先要做的是创建一个子列表,其中仅包含与嵌套列表中的第二项对应的“1”。我能够通过以下命令执行此操作:

Subbasin_1 = [] 
Subbasin_1.append([x for x in Subbasins_Imp if x[1] == '1']) 
print Subbasin_1 

给出这些正确的结果:

[['21', '1'], ['21', '1'], ['21', '1'], ['21', '1'], ['22', '1'],...] 

现在我想创建另一个子列表,它将为我提供 Subbasin_1 的每个嵌套列表中的所有“21”。当我使用同一行脚本,但更改适当的项目时,我得到一个空列表。不确定发生了什么...?

OS_Count1 = [] 
OS_Count1.append([x for x in Subbasin_1 if x[0] == '21']) 
print OS_Count1 

结果是 [[]] ???两者有什么区别? 感谢您的帮助...

请您参考如下方法:

我不相信你

[['21', '1'], ['21', '1'], ['21', '1'], ['21', '1'], ['22', '1'],...] 

行可以由您提供的代码生成。您的 Subbasin_1.append 行将一个 list 附加到空列表 Subbasin_1,因此您应该得到类似于

[[['22', '1'], ['21', '1']]] 

多了一层嵌套。

如果你避免了不必要的空列表构造+附加,你应该得到你想要的:

>>> Subbasins_Imp = [['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'], ['21', '1']] 
>>>  
>>> Subbasin_1 = [x for x in Subbasins_Imp if x[1] == '1'] 
>>> print Subbasin_1 
[['22', '1'], ['21', '1']] 
>>> OS_Count1 = [x for x in Subbasin_1 if x[0] == '21'] 
>>> print OS_Count1 
[['21', '1']] 

或者,您可以简单地将 append 替换为 extend。我不推荐这样做,但它可能会帮助您了解发生了什么:

>>> Subbasins_Imp = [['22', '1'], ['21', '15'], ['11', '3'], ['31', '4'], ['41', '13'], ['21', '1']] 
>>>  
>>> Subbasin_1 = [] 
>>> Subbasin_1.extend([x for x in Subbasins_Imp if x[1] == '1']) 
>>> print Subbasin_1 
[['22', '1'], ['21', '1']] 
>>>  
>>> OS_Count1 = [] 
>>> OS_Count1.extend([x for x in Subbasin_1 if x[0] == '21']) 
>>> print OS_Count1 
[['21', '1']]