我试图对列表进行排序。我怎样才能打印或迭代每个列表中的第一个和最后一个元素?下面的非工作代码:
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
答案 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]]