arbitrary_element#

arbitrary_element(iterable)[source]#

返回 iterable 中的任意一个元素,但不移除该元素。

这对于“窥视”集合中的任意元素最为有用,但也可以用于任何列表、字典等。

Parameters:
iterable :`abc.collections.Iterable` 实例

任何实现了 __iter__ 的对象,例如集合、字典、列表、元组等。

Returns:
next(iter(iterable)) 得到的结果对象
Raises:
ValueError

如果 iterable 是一个迭代器(因为该函数的当前实现会消耗迭代器中的一个元素)。

Notes

该函数返回的不是 随机 元素。如果 iterable 是有序的,连续调用将返回相同的值:

>>> l = [1, 2, 3]
>>> nx.utils.arbitrary_element(l)
1
>>> nx.utils.arbitrary_element(l)
1

Examples

从常见的可迭代对象中获取任意元素:

>>> nx.utils.arbitrary_element([1, 2, 3])  # 列表
1
>>> nx.utils.arbitrary_element((1, 2, 3))  # 元组
1
>>> nx.utils.arbitrary_element({1, 2, 3})  # 集合
1
>>> d = {k: v for k, v in zip([1, 2, 3], [3, 2, 1])}
>>> nx.utils.arbitrary_element(d)  # 字典键
1
>>> nx.utils.arbitrary_element(d.values())  # 字典值
3

str 也是一个可迭代对象:

>>> nx.utils.arbitrary_element("hello")
'h'

如果 iterable 是一个迭代器,则会引发 ValueError

>>> iterator = iter([1, 2, 3])  # 迭代器,不是可迭代对象
>>> nx.utils.arbitrary_element(iterator)
Traceback (most recent call last):
    ...
ValueError: 无法从迭代器返回任意项