Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 递归序列_Python_List_Recursion_Sequence_Repeat - Fatal编程技术网

Python 递归序列

Python 递归序列,python,list,recursion,sequence,repeat,Python,List,Recursion,Sequence,Repeat,如何打印包含列表中字母(可以重复)的长度为n的所有序列使用递归。 例如: seq = ['a', 'b'] n = 2 输出: aa,ab,ba,bb 我一直在查找,只能找到递归程序,这些程序给出了所有序列的无重复。此外,对于给定的列表,我找不到任何解决方案(其中大多数是给定的字符串) 其中一个问题是,当函数包含长度n时,我不确定如何递归地处理该函数 您可以重新使用子序列的长度。如果n==0,则只有一个子序列-空子序列。否则,将获取列表中的所有元素对和长度为n-1的子序列,并获取长度为n的所

如何打印包含列表中字母(可以重复)的长度为n的所有序列使用递归。 例如:

seq = ['a', 'b']
n = 2
输出:

aa,ab,ba,bb
我一直在查找,只能找到递归程序,这些程序给出了所有序列的重复。此外,对于给定的列表,我找不到任何解决方案(其中大多数是给定的字符串)


其中一个问题是,当函数包含长度n时,我不确定如何递归地处理该函数

您可以重新使用子序列的长度。如果
n==0
,则只有一个子序列-空子序列。否则,将获取列表中的所有元素对和长度为n-1的子序列,并获取长度为
n
的所有子序列

def subseqs(lst, n):
    if n <= 0:
        return [[]]
    else:
        return [[x] + xs for x in lst for xs in subseqs(lst, n - 1)]
def子类(lst,n):
如果n我将使用itertools

import itertools

seq = ['a', 'b']
n = 2

print([i+j for i,j in itertools.product(seq,repeat=n)])
这是产品的一项任务;)

顺便说一句:如果您不想使用模块,请查看源代码:

def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100     101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)
源代码位于:

学习并反向工程它以满足您的需要;)。例如,如果您不希望它返回元组。

解决此问题的方法之一是使用
itertools.product

我希望这有帮助:)

这里有另一种方法,只使用递归。
findseqrecpercar
查找列表中特定字符的所有可能组合,而
findSeqRec
查找每个字符的所有可能组合:

seq = ['a', 'b']
n = 2

def findSeqRecPerChar(seq,n,elem,index):
    if index == n:
        return []
    else:
        return [elem+seq[index]] + findSeqRecPerChar(seq,n,elem,index+1)

def findSeqRec(seq,n,index,l):
    if index == n-1:
        return l + []
    else:
        l.extend(findSeqRecPerChar(seq,n,seq[index-1],0))
        return findSeqRec(seq,n,index+1,l)

result = findSeqRec(seq,n,-1,[])

print(result)
输出:

['aa', 'ab', 'ba', 'bb']

您正在寻找PSL模块无法使用任何模块;(@jlandercyank这是作业还是作业?如果是,请添加
作业
标记并在您的帖子中说明。itertools是Python标准库的一部分。它随Pythontanks一起提供。您能解释一下xs的意思吗?另外,这对更长的序列有效吗?(例如['a'、'b'、'c'])@Yakym pirozhenko这适用于较长的序列;
xs
是列表理解的一部分-您可以查看文档中的示例。您可以使用两个for循环完成相同的任务,但从Python的角度来看,这可能不够优雅。在这种情况下,
xs
表示长度
n-1
的子序列nk OP不想使用
itertools
。否则,你也可以使用
combinatons\u和替换工具架上的
。他可以查看源代码并重写itertools产品函数;)可能会有教育意义,尽管我认为该产品是用C实现的,以提高效率。学究,但这里是实际的来源:上面的代码片段是一个Python模拟代码。可能他希望它位于Python层;)
['aa', 'ab', 'ba', 'bb']