我有 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']]
