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