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

时间:2015-10-21 18:17:07

标签: python list loops nested sublist

我已获得列表student

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

我已获得read data子列表:

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

我编写了以下嵌套循环,以便在x read_data中返回子列表的索引(简称student[0] == x[0]):

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个子列表中的任何一个并获取该子列表的索引?

2 个答案:

答案 0 :(得分:0)

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

maven-checkstyle-plugin

为:

read_data[iter_expr]

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

有更好的方法可以做到这一点,但这可能是解决您询问的具体问题的最小变化。

答案 1 :(得分:0)

我不知道你为什么要这样做,但是你需要在列表理解中加上括号,并将索引作为第一个匹配,如下所示:

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

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