gpt4 book ai didi

python - 什么是切片集合的pythononic方法?

转载 作者:行者123 更新时间:2023-12-04 10:17:02 27 4
gpt4 key购买 nike

我有一些数据列表,例如

some_data = [1, 2, 4, 1, 6, 23, 3, 56, 6, 2, 3, 5, 6, 32, 2, 12, 5, 3, 2]

我想获得固定长度的唯一值(我不在乎我会得到哪个),我也希望它是 set目的。

我知道我可以做 set来自 some_data然后制作 list ,裁剪然后制作 set再次。
set(list(set(some_data))[:5])  # don't look so friendly

我知道我没有 __getitem__ set 中的方法这不会使整个切片成为可能,但如果有机会让它看起来更好?

我完全理解 set是无序的。因此,最终 set 中将获得哪些元素并不重要.

可能的选择是使用:
  • ordered-set
  • 使用 dictNone值(value)观:
    set(dict(map(lambda x: (x, None), some_data)).keys()[:2])  # not that great
  • 最佳答案

    集合是可迭代的。如果你真的不关心从你的集合中选择了哪些项目,你可以使用 itertools.islice获得一个迭代器,该迭代器将产生指定数量的项目(以迭代顺序中最先出现的项目为准)。将迭代器传递给 set构造函数,您无需使用任何额外列表即可获得子集:

    import itertools

    some_data = [1, 2, 4, 1, 6, 23, 3, 56, 6, 2, 3, 5, 6, 32, 2, 12, 5, 3, 2]
    big_set = set(some_data)
    small_set = set(itertools.islice(big_set, 5))

    虽然这是您所要求的,但我不确定您是否真的应该使用它。集合可能会以非常确定的顺序进行迭代,因此如果您的数据通常包含许多相似的值,那么每次执行此操作时您可能最终都会选择一个非常相似的子集。当数据由整数组成时(如示例中所示),这尤其糟糕,这些整数会自行散列。在迭代集合时,连续整数将非常频繁地按顺序出现。有了上面的代码,只有 32big_set 中出现故障(使用 Python 3.5),所以 small_set{32, 1, 2, 3, 4} .如果您添加了 0对于您的数据,您几乎总是以 {0, 1, 2, 3, 4} 结束即使数据集变得很大,因为这些值总是会填满集合哈希表中的前五个位置。

    为了避免这种确定性采样,您可以使用 random.sample as suggested by jprockbelly .

    关于python - 什么是切片集合的pythononic方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736681/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com