在Python中从给定数组创建一组子数组

在Python中从给定数组创建一组子数组,python,arrays,set,Python,Arrays,Set,我一直在尝试用Python实现以下想法: 给定一个长度为n,arr的字符数组,我想创建一个长度为k的集合所有子数组如果您不打算以后修改部分列表,您可以简单地使用(哈希)元组 如果以后不打算修改部分列表,可以简单使用(可哈希)元组 您可以根据给定的大小进行范围的所有组合,而不是手动附加到集合 此函数combinations(lis,r)生成大小r->[0,k+1]的所有组合,然后生成链。from_iterable()从每个生成器表达式获取所有组合,并以展平的iterable形式返回它们,然后将其转

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


给定一个长度为n,arr的字符数组,我想创建一个长度为k的集合所有子数组如果您不打算以后修改部分列表,您可以简单地使用(哈希)元组


如果以后不打算修改部分列表,可以简单使用(可哈希)元组


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

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

输出:

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

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

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

输出:

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

Python列表不可散列,因为它是可变的。您不能将列表存储在set.Als中,调用变量
set
是一种不好的做法,因为
set
是创建类型的保留关键字。Python列表是不可散列的,因为它是可变的。您不能将列表存储在set.Als中,调用变量
set
是一种不好的做法,因为
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'), ()}