如何迭代列表列表?

时间:2017-07-04 11:58:58

标签: python list

我试图对列表进行排序。我怎样才能打印或迭代每个列表中的第一个和最后一个元素?下面的非工作代码:

from numpy import *
xs=[[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]]

for i in xs:
    for j in xs[i]:
        print(xs[1],xs[-1])
如果需要,

追踪错误:

runfile('/Users/Alex/untitled9.py', wdir='/Users/Alex')
Traceback (most recent call last):

  File "<ipython-input-14-8a28382c7f81>", line 1, in <module>
    runfile('/Users/Alex/untitled9.py', wdir='/Users/Alex')

  File "/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/Alex/untitled9.py", line 13, in <module>
    for j in xs[i]:

TypeError: list indices must be integers or slices, not list

4 个答案:

答案 0 :(得分:2)

你已经在评论中得到了答案。但要理解为什么你的代码在当前状态下不起作用,请看一下:

>>> xs = [[1.,2.,3.], [4.,5.,6.], [7.,8.,9.]]
>>> for i in xs:
...    print(i)
... 
[1.0, 2.0, 3.0]
[4.0, 5.0, 6.0]
[7.0, 8.0, 9.0]

for循环迭代元素,而不是索引。变量i在这里可能令人困惑。无论如何,在循环内部,i将在每次迭代时包含一个子列表。所以xs[i]在这里是一个无效的操作 - 你可能只提供整数作为python列表的索引。

如果您想获得每个子列表的第一个和最后一个元素,您只需要打印i[0]i[-1]

在相关的说明中,您可以使用range函数迭代索引:

 for i in range(len(xs)):
     print(xs[i][0], xs[i][-1])

但不建议这样做,因为直接迭代元素会更有效,特别是对于这个用例。

如果您同时需要,还可以使用enumerate

 for c, i in enumerate(xs):
     print(i[0], xs[c][-1]) # both work here

答案 1 :(得分:0)

当您遍历列表时,您会从列表的每个成员获得,如果该是一个列表,您可以创建第二个循环来迭代项目,如下所示:

for items in xs:
    for elem in items:
        # in here you get each element of the inner list

要获得第一个和最后一个值,您根本不需要以前的答案:

for item in xs:
    print(item[0], item[-1]

如果你感觉有点滑稽,你甚至可以使用全面的列表将它们存储在你自己的列表中,如下所示:

  

funny_list = [[item [0],item [-1]] for xs]中的项目

答案 2 :(得分:0)

在您提供的代码中:

temp = date; % copy of the original dates
temp(isnan(hauteur))=NaN; % set the values which are NaN in hauteur to NaN
h_interp = interp1(date,hauteur,interp1(date,temp,vect),'spline'); % the inner interpolation results in vect with NaNs where appropriate 

在外部for循环中,变量for i in xs: for j in xs[i]: print(xs[1],xs[-1]) 存储内部数组,因此在内部for循环中,当你执行i时,它会产生错误。这是因为你只能在数组中使用整数作为索引(这是有意义的,因为你想要第0个,第1个或第2个元素,没有像第[1,2,3]个元素这样的东西,{{你编写的代码中的1}}基本上意味着。)

现在,为了简单地迭代多维数组:

xs[i]

这将给出:

xs[i]

如果您只想打印内部列表的第一个和最后一个项目,可以这样做:

for i in xs:
    for j in i:
        print(j)
    print("\n")

希望这有帮助

答案 3 :(得分:0)

试试这个:

li = []
for i in range(len(xs)):
    li.append([xs[i][0],xs[i][-1]])

output: [[1.0, 3.0], [4.0, 6.0], [7.0, 9.0]]