Pyd*_*man 57 python list python-2.7 python-3.x iterable-unpacking
当已知Python列表始终包含单个项目时,是否可以访问它而不是:
mylist[0]
Run Code Online (Sandbox Code Playgroud)
你可能会问,'你为什么要这样?'.仅好奇心.似乎有另一种方法可以在Python中完成所有工作.
Sha*_*ger 89
序列拆包:
singleitem, = mylist
# Identical in behavior (byte code produced is the same),
# but arguably more readable since a lone trailing comma could be missed:
[singleitem] = mylist
Run Code Online (Sandbox Code Playgroud)
显式使用迭代器协议:
singleitem = next(iter(mylist))
Run Code Online (Sandbox Code Playgroud)
破坏性流行音乐:
singleitem = mylist.pop()
Run Code Online (Sandbox Code Playgroud)
负指数:
singleitem = mylist[-1]
Run Code Online (Sandbox Code Playgroud)
通过单次迭代设置for(因为循环变量在循环终止时仍保持其最后一个值):
for singleitem in mylist: break
Run Code Online (Sandbox Code Playgroud)
许多其他的(结合或改变上面的位,或者依赖于隐式迭代),但你明白了.
pyl*_*ang 14
我将补充说,该more_itertools
库有一个工具可以从一个iterable中返回一个项目.
from more_itertools import one
iterable = ["foo"]
one(iterable)
# "foo"
Run Code Online (Sandbox Code Playgroud)
此外,more_itertools.one如果iterable为空或具有多个项目,则会引发错误.
iterable = []
one(iterable)
# ValueError: not enough values to unpack (expected 1, got 0)
iterable = ["foo", "bar"]
one(iterable)
# ValueError: too many values to unpack (expected 1)
Run Code Online (Sandbox Code Playgroud)