可迭代对象

对可迭代对象的操作。

类型变量

class T
TypeVar('T')
class U
TypeVar('U')
class F
TypeVar('F', np.float64, np.int_)
class H
TypeVar('H', bound=Hashable)

函数

adjacent_n_tuples(objects, n)[source]

将序列对象循环地拆分为 n 长度的元组。

另请参阅

adjacent_pairs

n=2 时的别名

示例

>>> list(adjacent_n_tuples([1, 2, 3, 4], 2))
[(1, 2), (2, 3), (3, 4), (4, 1)]
>>> list(adjacent_n_tuples([1, 2, 3, 4], 3))
[(1, 2, 3), (2, 3, 4), (3, 4, 1), (4, 1, 2)]
参数:
  • objects (Sequence[T])

  • n (int)

返回类型:

zip[tuple[T, …]]

adjacent_pairs(objects)[source]

adjacent_n_tuples(objects, 2) 的别名。

另请参阅

adjacent_n_tuples

示例

>>> list(adjacent_pairs([1, 2, 3, 4]))
[(1, 2), (2, 3), (3, 4), (4, 1)]
参数:

objects (Sequence[T])

返回类型:

zip[tuple[T, …]]

all_elements_are_instances(iterable, Class)[source]

如果可迭代对象的所有元素都是 Class 的实例,则返回 True。否则返回 False

参数:
  • iterable (Iterable[object])

  • Class (type[object])

返回类型:

bool

batch_by_property(items, property_func)[source]

接收一个序列,并返回一个元组列表 (batch, prop),其中 batch 中的所有项在 Callable property_func 中运行时具有相同的输出,并且将所有这些 batch 链接起来将得到原始序列(即保留顺序)。

示例

>>> batch_by_property([(1, 2), (3, 4), (5, 6, 7), (8, 9)], len)
[([(1, 2), (3, 4)], 2), ([(5, 6, 7)], 3), ([(8, 9)], 2)]
参数:
  • items (Iterable[T])

  • property_func (Callable[[T], U])

返回类型:

list[tuple[list[T], U | None]]

concatenate_lists(*list_of_lists)[source]

将作为参数提供的可迭代对象合并到一个列表中。

示例

>>> concatenate_lists([1, 2], [3, 4], [5])
[1, 2, 3, 4, 5]
参数:

list_of_lists (Iterable[T])

返回类型:

list[T]

hash_obj(obj)[source]

确定哈希值,即使是可变对象也可以。

参数:

obj (object)

返回类型:

int

list_difference_update(l1, l2)[source]

返回一个包含 l1 中不在 l2 中的所有元素的列表。

示例

>>> list_difference_update([1, 2, 3, 4], [2, 4])
[1, 3]
参数:
  • l1 (Iterable[T])

  • l2 (Iterable[T])

返回类型:

list[T]

list_update(l1, l2)[source]
用于代替 set.update() 以保持顺序,

确保从 l1 中删除重复项,而不是 l2。删除 l1 和 l2 的重叠部分,然后将 l2 不变地连接起来。

示例

>>> list_update([1, 2, 3], [2, 4, 4])
[1, 3, 2, 4, 4]
参数:
  • l1 (Iterable[T])

  • l2 (Iterable[T])

返回类型:

list[T]

listify(obj: str) list[str][source]
listify(obj: Iterable[T]) list[T]
listify(obj: T) list[T]

智能地将 obj 转换为列表。

示例

>>> listify("str")
['str']
>>> listify((1, 2))
[1, 2]
>>> listify(len)
[<built-in function len>]
make_even(iterable_1, iterable_2)[source]
用重复值扩展两个可迭代对象中较短的一个,直到其

长度与较长的可迭代对象相等(优先考虑较早的元素)。

另请参阅

make_even_by_cycling

循环元素而不是优先考虑较早的元素

示例

>>> make_even([1, 2], [3, 4, 5, 6])
([1, 1, 2, 2], [3, 4, 5, 6])

>>> make_even([1, 2], [3, 4, 5, 6, 7])
([1, 1, 1, 2, 2], [3, 4, 5, 6, 7])
参数:
  • iterable_1 (Iterable[T])

  • iterable_2 (Iterable[U])

返回类型:

tuple[list[T], list[U]]

make_even_by_cycling(iterable_1, iterable_2)[source]
用重复值扩展两个可迭代对象中较短的一个,直到其

长度与较长的可迭代对象相等(在较短的可迭代对象上循环)。

另请参阅

make_even

优先考虑较早的元素而不是循环它们

示例

>>> make_even_by_cycling([1, 2], [3, 4, 5, 6])
([1, 2, 1, 2], [3, 4, 5, 6])

>>> make_even_by_cycling([1, 2], [3, 4, 5, 6, 7])
([1, 2, 1, 2, 1], [3, 4, 5, 6, 7])
参数:
  • iterable_1 (Collection[T])

  • iterable_2 (Collection[U])

返回类型:

tuple[list[T], list[U]]

remove_list_redundancies(lst)[source]

用于代替 list(set(l)) 以保持顺序。保留每个元素的最后一次出现。

参数:

lst (Reversible[H])

返回类型:

list[H]

remove_nones(sequence)[source]

删除 bool(x) 求值为 False 的元素。

示例

>>> remove_nones(["m", "", "l", 0, 42, False, True])
['m', 'l', 42, True]
参数:

sequence (Iterable[T | None])

返回类型:

list[T]

resize_array(nparray, length)[source]
扩展/截断 nparray,使 len(result) == length

nparray 的元素会被循环以达到所需的长度。

另请参阅

resize_preserving_order

优先考虑较早的元素而不是循环它们

make_even_by_cycling

用于平衡两个可迭代对象的类似循环行为

示例

>>> points = np.array([[1, 2], [3, 4]])
>>> resize_array(points, 1)
array([[1, 2]])
>>> resize_array(points, 3)
array([[1, 2],
       [3, 4],
       [1, 2]])
>>> resize_array(points, 2)
array([[1, 2],
       [3, 4]])
参数:
  • nparray (npt.NDArray[F])

  • length (int)

返回类型:

npt.NDArray[F]

resize_preserving_order(nparray, length)[source]
扩展/截断 nparray,使 len(result) == length

nparray 的元素会被复制以达到所需的长度(优先考虑较早的元素)。

如果 nparray 为空,则构造一个指定长度的全零数组。

另请参阅

resize_array

循环元素而不是优先考虑较早的元素

make_even

用于平衡两个可迭代对象的类似优先考虑较早元素的行为

示例

>>> resize_preserving_order(np.array([]), 5)
array([0., 0., 0., 0., 0.])

>>> nparray = np.array([[1, 2], [3, 4]])
>>> resize_preserving_order(nparray, 1)
array([[1, 2]])

>>> resize_preserving_order(nparray, 3)
array([[1, 2],
       [1, 2],
       [3, 4]])
参数:
  • nparray (npt.NDArray[np.float64])

  • length (int)

返回类型:

npt.NDArray[np.float64]

resize_with_interpolation(nparray, length)[source]
扩展/截断 nparray,使 len(result) == length

新元素通过插值法获得以达到所需的长度。

请注意,如果 nparray 的长度发生变化,其 dtype 也可能随之变化(例如 int -> float:参见示例)

另请参阅

resize_array

循环元素而不是插值

resize_preserving_order

优先考虑较早的元素而不是插值

示例

>>> nparray = np.array([[1, 2], [3, 4]])
>>> resize_with_interpolation(nparray, 1)
array([[1., 2.]])
>>> resize_with_interpolation(nparray, 4)
array([[1.        , 2.        ],
       [1.66666667, 2.66666667],
       [2.33333333, 3.33333333],
       [3.        , 4.        ]])
>>> nparray = np.array([[[1, 2], [3, 4]]])
>>> nparray = np.array([[1, 2], [3, 4], [5, 6]])
>>> resize_with_interpolation(nparray, 4)
array([[1.        , 2.        ],
       [2.33333333, 3.33333333],
       [3.66666667, 4.66666667],
       [5.        , 6.        ]])
>>> nparray = np.array([[1, 2], [3, 4], [1, 2]])
>>> resize_with_interpolation(nparray, 4)
array([[1.        , 2.        ],
       [2.33333333, 3.33333333],
       [2.33333333, 3.33333333],
       [1.        , 2.        ]])
参数:
  • nparray (npt.NDArray[F])

  • length (int)

返回类型:

npt.NDArray[F]

stretch_array_to_length(nparray, length)[source]
参数:
  • nparray (npt.NDArray[F])

  • length (int)

返回类型:

npt.NDArray[F]

tuplify(obj: str) tuple[str][source]
tuplify(obj: Iterable[T]) tuple[T]
tuplify(obj: T) tuple[T]

智能地将 obj 转换为元组。

示例

>>> tuplify("str")
('str',)
>>> tuplify([1, 2])
(1, 2)
>>> tuplify(len)
(<built-in function len>,)
uniq_chain(*args)[source]
返回一个生成器,该生成器按提供的顺序生成所有唯一的

可迭代对象中的元素。

示例

>>> gen = uniq_chain([1, 2], [2, 3], [1, 4, 4])
>>> from collections.abc import Generator
>>> isinstance(gen, Generator)
True
>>> tuple(gen)
(1, 2, 3, 4)
参数:

args (Iterable[T])

返回类型:

Generator[T, None, None]