![](/img/trans.png)
[英]In Python3, Why list object is an iterable but not iterator directly?
[英]Python iterator and iterable with list
我正在通过观看 Pluralsight 课程来学习 Python,并开始尝试使用迭代器和可迭代示例。 我遇到的一个我无法解释的问题是以下迭代器和可迭代示例:
以下要么返回第一项,要么在为空时引发 ValueError:
def first(iterable):
iterator = iter(iterable)
try:
return next(iterator)
except StopIteration:
raise ValueError("iterable is empty")
课程中的例子有效:
first({"1st","2nd","3rd"})
通过返回'1st'但是当我将列表的内容更改为:
first({"1","2","3"})
返回的值是“2”而不是“1”
为什么会出现这种情况?
顺便说一句,我也试过:
first({1,2,3})
并返回预期值: 1
您根本没有使用list
。 {"1st","2nd","3rd"}
是一个set
文字,并且set
s 是无序的(它们以某种顺序迭代,但不是一个有用的顺序,甚至在不同的 Python 运行或set
s 构造中必须重复的顺序在一次 Python 运行中以不同的方式)。
如果您尝试制作list
文字,请使用[]
,而不是{}
。 first(["1st","2nd","3rd"])
, first(["1","2","3"])
和first([1,2,3])
行为都可以预测(返回"1st"
、 "1"
和1
分别),因为list
有顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.