繁体   English   中英

Python:使用嵌套的 for 循环生成子列表的索引

[英]Python: Using a nested for loop to produce the index for a sublist

我有名单student

student = ["test_name","1","6"]

我有read data子列表:

read_data = [["test_name","1","2","5","9"],["test_name_2","1","5","2","10"]]

如果student[0] == x[0]我已经编写了以下嵌套循环来返回read_data列表(称为x )的索引:

lst = [read_data.index(x) for x in read_data if x[0] == student [0]]

所以我遍历读取数据中的每个项目,并且(如果x[0] == student[0] )子列表的索引应该存储在lst

当我尝试在列表的 index 参数中使用它来插入数据时,如下所示:

read_data[read_data.index(x) for x in read_data if x[0] == student[0]].insert(2,student[0])

我收到一条错误消息,说生成器不能用于索引 - 为什么不呢? 我显然可以只使用存储在lst的整数,但这似乎效率低下 - 当然有一种方法可以在一行上做到这一点。

是否有更好的替代方法来检查字符串是否在read_data的任何子列表中并获取该子列表的索引?

在对 lst 的分配中,您正在创建一个列表。 但是在下面的代码片段中,您只是获取了该列表表达式的内部并尝试将其用作索引。 要修复您的特定示例,您需要更改:

read_data[iter_expr]

到:

read_data[[iter_expr][0]]

这将使用列表中的第一个值作为索引。

有更好的方法可以做到这一点,但这可能是解决您询问的特定问题的最小更改。

我不知道你为什么要这样做,但是你需要在列表理解周围加上括号,并像这样获取它的第一个匹配项的索引:

read_data[[read_data.index(x) for x in read_data if x[0] == student[0]][0]].insert(2, student[0])

请记住,如果列表推导式生成一个空列表,您将遇到IndexError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM