【问题标题】:Creating a set of sub arrays from a given array in Python在 Python 中从给定数组创建一组子数组
【发布时间】:2021-01-04 09:59:47
【问题描述】:

我一直在尝试用 Python 实现以下想法:

给定一个长度为 n,arr 的字符数组,我想创建一组长度为 k

我遇到的问题是,当我“实现”这段代码时,它说它是不可散列的,我并不真正理解这个概念。这似乎是一个相对简单的想法,所以我很确定解决方案应该很简单,但我是编码新手。

我在下面附上我尝试编写的代码,希望有人能指出代码中的错误并希望如何纠正它:

...
# arr is the given array of characters, size is the given k, len(arr) is n
set = set()
for i in range ( len(arr)- size -1 ):
      temp = arr[i: i+size]
      set = set | {temp}
...

【问题讨论】:

  • Python 列表由于是可变的而不是可散列的。 stackoverflow.com/questions/42203673/…。您只是不能将列表存储在一个集合中。
  • Als,调用变量set 是不好的做法,因为set 是用于创建类型的保留关键字。

标签: python arrays set


【解决方案1】:

如果您以后不打算修改部分列表,您可以简单地使用(可散列的)元组。

s = set()
for i in range ( len(arr)- size -1 ):
      temp = tuple(arr[i: i+size])
      s = s | {temp}

【讨论】:

    【解决方案2】:

    您可以根据给定大小对范围进行所有组合,而不是手动附加到 set

    此函数combinations(lis, r) 生成大小为r -> [0, k + 1] 的所有组合,然后chain.from_iterable() 从每个生成器表达式中获取所有组合,并以扁平化的iterable 返回它们,然后将其转换为set()

    from itertools import chain, combinations
    
    def sub_arrays(arr, k): # Produces a set of sub-arrays of size k.
        return set(chain.from_iterable(combinations(arr, r) for r in range(k + 1)))
    
    arr = ['h', 'e', 'y']
    print(sub_arrays(arr, k = 2)) # size = 2
    

    输出:

    {('h',), ('y',), ('e',), ('h', 'y'), ('e', 'y'), ('h', 'e'), ()}
    

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 2014-05-02
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多