问一个 Python 的简单语法区别, for i in list 和 for i in range 的区别?

2020-05-13 19:20:45 +08:00
 GTD
已知 list = [1,2,3,4,5]

for i in list 和 for i in range(len(list))

有什么区别呢?感谢
5398 次点击
所在节点    Python
21 条回复
Pagliacii
2020-05-13 19:24:05 +08:00
前者是遍历列表元素,后者是遍历 [0, len(list)) 序列的元素
wenqiang1208
2020-05-13 19:24:15 +08:00
。。。。
for i in list : i 是 list 里面的元素的值
for i in range(len(list)) :i 是 range 新生成迭代器( 0,1,2,3,4 )里的元素
GTD
2020-05-13 19:24:24 +08:00
哦哦 我明白了,for i in list 的话,是把 i 变成 list 的每一个,然后每次增加一个,按 1,2,3,4,5 来。in range 的话,就一定是从 0-5 这样来
GTD
2020-05-13 19:25:37 +08:00
不好意思我丢人了。。。好久没写 Python,刚刚突然发现用 range 可以,直接 in list 不行,哈哈哈
Pagliacii
2020-05-13 19:26:19 +08:00
只是恰好你的列表元素是数字而已
cz5424
2020-05-13 19:28:48 +08:00
for i in range(1, 5)举一反三
cz5424
2020-05-13 19:29:04 +08:00
@cz5424 写错,应该是 6
ipwx
2020-05-13 19:30:03 +08:00
@GTD 。。。你还是理解错了。python 的 for 从来没有“i 累加”这个语义,都是“foreach”的语义。
arrow8899
2020-05-13 20:02:12 +08:00
还可以这样写
for index, value in enumerate(list):
print (index, value)
效率更高,也更简洁
crella
2020-05-13 20:02:41 +08:00
实现了 iterable 就行(好像是这样吧
crella
2020-05-13 20:04:11 +08:00
感觉动态语言的发展方向都差不多,啥时候 nodejs 也能支持 for 或者 each 迭代?(
crella
2020-05-13 20:10:35 +08:00
sorry,又暴露了我的无知,js 对应的是 for (let value of/in list){...}
l1nyanm1ng
2020-05-13 20:12:04 +08:00
@crella 直接用 Array.prototype.forEach 或者 Array.prototype.map 岂不美哉,感觉都好久没用过命令式的 api 了
zhanglintc
2020-05-13 22:01:51 +08:00
我还以为是在问 list 和 generator 的区别, 结果是这个.

list 里放点别的东西差别就很明显了嘛.
sudoy
2020-05-13 23:10:11 +08:00
楼上说的对,你放点别的东西,别放 12345,这样一眼就看出来。一个是值,一个是 index

mylist = ['google', 'facebook', 'microsoft']

for x in mylist:
print(x) # 输出结果应该是 google, amazon, facebook

for y in range(len(mylist)):
print(y) # 输出结果应该是 0, 1, 2
Enying
2020-05-14 00:05:13 +08:00
大家都是正解
sunmker
2020-05-14 09:23:42 +08:00
前者是遍历,后者是取下标,list 有下标,别的嘞?
julyclyde
2020-05-14 09:55:29 +08:00
@sunmker 后者也不是取下标
24bit
2020-05-14 10:25:23 +08:00
本质上都是一样的,只要实现了迭代器协议就可以用 for ... in 语法,range 对象迭代时返回的是数字而已
llsquaer
2020-05-14 11:32:32 +08:00
for i in list:
print('i') 表示遍历列表,并打印 i 的值( 比如 a b c d).你的案例看不出区别

for i in range(len(list)):
print('i') 表示遍历的次数,并打印迭代后的数值

当然 你问题 有 list 和 range ...list 是列表,,而 range 简单理解为计数用的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX