python - python中的列表操作,列表中有3个列表
问题描述
我有一个列表列表 - 本质上
[ [[val1, val2...], [val3, val4...]...], [[val5, val6...], [val7, val8...]...], ...]
在 python 上,打印得很漂亮,输出如下所示:
[[['a',
'b',
'c',
'test1',
'd',
'e',
'f',
'g'],
['h',
'i',
'j',
'k',
'l',
'm']],
[['n',
'o',
'p',
'test2',
'q',
'r',
's',
't'],
['u',
'v',
'w',
'x',
'y',
'z']]]
如何将 test1 和 test2 放入列表中,但作为两个单独的项目:
[ ['test1'], ['test2'] ]
这似乎很容易,但我不确定如何使用列表理解或遍历列表来获得它,因为有些值包含 8 个实体,有些包含 6 个。
解决方案
先试着先用英文写,再翻译成Python。
- 你有一个顶级列表。你想要它的
prof-name
每个子列表中的。 - 每个子列表有两个子子列表。您只需要第一个子列表。
- 每个子子列表都有一堆字符串,6 个或 8 个。无论哪种方式,您只需要第四个。
这些中的每一个都很容易翻译成 Python:
- 每个子列表:
for sublst in lst
. - 每个子列表的第一个元素:
sublst[0]
. - 每个子子列表的第四个元素:
sublst[0][3]
.
把它放在一起:
[sublst[0][3] for sublst in lst]
该英文描述适用于您的示例,因此该代码适用于您的示例。如果应用的规则集不正确,请提出一组不同的规则,它们将同样易于翻译。
例如,也许你不想要第四个,你想要那些以prof-
?
在这种情况下:
- 每个子列表。
- 第一个子子列表。
- 以 开头的子子列表的每个元素
Prof-
。
最后一个有点棘手——我们不能只做element.startswith('Prof-')
,因为有些元素是整数。所以让我们写一个函数:
def prof(element):
return isinstance(element, str) and element.startswith('Prof-')
现在:
for sublst in lst
sublst[0]
for element in sublst[0] if prof(element)
把它放在一起:
[element for sublst in lst for element in sublst[0] if prof(element)]
但也许这太密集了。一旦你在理解中得到了三个从句,就很难推理了。也许我们应该先把它展平,然后过滤它:
elements = (element for sublst in lst for element in sublst[0])
profs = [element for element in elements if prof(element)]
有点长,但希望更容易理解。
推荐阅读
- c# - 在我给它一个输入之后,我的程序一直跳到 else 语句。我已经尝试了一些东西,但没有任何工作。(C#)
- android - 如何使用另一个外部xml视图android?
- woocommerce - 如何获取 Wocomerce 根 URL 以显示商店?
- java - 未能执行目标 org.apache.maven.plugins:maven-gpg-plugin:1.5:sign
- java - 如何在不级联删除 ChildEntities 的情况下删除(@ManyToOne)实体?
- python - matplotlib 将 df 绘制到矩形
- reactjs - 我的 React 应用程序在我的 PC 上无法正常工作
- unreal-engine4 - 即使在将显示鼠标光标布尔值设置为 false 后也显示鼠标
- javascript - 井字游戏:重置游戏后无限获胜
- python - 验证公司名称