首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中找到每个元素的唯一集合,其中的差异是1?

如何在Python中找到每个元素的唯一集合,其中的差异是1?
EN

Stack Overflow用户
提问于 2022-06-16 22:31:30
回答 4查看 61关注 0票数 -4

我有一个整数数组。我想找出所有唯一的集合,其中的差异是1,并将它们分离为唯一的集合。

输入实例: 3,4,5,8,9,11

输出示例:{3,4,5},{8,9},{11}

用Python做这件事最简单的方法是什么?

EN

回答 4

Stack Overflow用户

发布于 2022-06-16 22:50:18

捕获链的开始,并将链的所有元素添加到一个集合中。

以下是这个想法的超级简单代码:

代码语言:javascript
运行
复制
def f(arr):
    res = []
    st = set(arr)
    for num in st:
        if num - 1 not in st: #begin of chain
            temp = []
            while num in st:
                temp.append(num)
                num += 1
            res.append(temp)
    return res
    
print(f([3,4,5,8,9,11]))

Output: [[3, 4, 5], [8, 9], [11]]

Time complexity: O(n)
Space complexity: O(n)

我想这是我们能达到的最好的复杂性。(不要介意代码中的变量名)

我假设您的输入列表不包含重复项。如果输入为3,4,5,8,9,11,8,9,10,我们是否希望独特的集合为[3,4,5,8,9,10,11,8,9,9]?如果是的话,那我就把它留给你做练习。提示:使用计数器/字典代替上面的设置,这很容易。

票数 1
EN

Stack Overflow用户

发布于 2022-06-16 22:42:48

也许不是最有效率的,但你可以排序,然后分开的差别。下面是一个使用numpy的解决方案:

代码语言:javascript
运行
复制
example_input = [3, 4, 5, 8, 9, 11]
output = np.split(np.sort(example_input),
                  np.where(np.diff(np.sort(example_input)) > 1)[0] + 1)

这样做的目的是找出排序数组的元素之间的差异大于一个,然后分割输入。我们在下一组中将一个元素添加到要拆分的元素中。

然后,如果您愿意,可以将数组映射到集合。

代码语言:javascript
运行
复制
sets = [set(x) for x in output]
# [{3, 4, 5}, {8, 9}, {11}]
票数 0
EN

Stack Overflow用户

发布于 2022-06-16 22:43:40

您可以从第一个数字开始,并将其递增1,直到您得到的新值不在原始列表( anymore.

  • Remove )原始列表中的值为止。

  • 对其余值重复相同的过程。

这应该能让你开始

代码语言:javascript
运行
复制
import typing

def find_unique(elems: list[int]) -> set[int]:
  ... # fill in your code here

def find_all_unique(elems: list[int]) -> typing.Iterator[set[int]]:
  while (elems):
    yield find_unique(elems)

if __name__ == '__main__':
  my_list = [3,4,5,8,9,11]
  print list(find_all_unique(my_list))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72652538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档