Python:递归

Python:递归,python,recursion,concatenation,Python,Recursion,Concatenation,虽然网上有很多关于递归的信息,但我还没有找到任何可以应用于我的问题的东西。我对编程还是很陌生,所以如果我的问题很琐碎,请原谅 谢谢你的帮助:) 这就是我想要的结局: listVariations(listOfItems, numberOfDigits) >>> listVariations(['a', 'b', 'c'], 1) >>> ['a', 'b', 'c'] >>> listVariations(['a', 'b', 'c'

虽然网上有很多关于递归的信息,但我还没有找到任何可以应用于我的问题的东西。我对编程还是很陌生,所以如果我的问题很琐碎,请原谅

谢谢你的帮助:)

这就是我想要的结局:

listVariations(listOfItems, numberOfDigits) 

>>> listVariations(['a', 'b', 'c'], 1)
>>> ['a', 'b', 'c'] 

>>> listVariations(['a', 'b', 'c'], 2)
>>> ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']

>>> listVariations(['a', 'b', 'c'], 3)
>>> ['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']
但到目前为止,我只能想出一个函数,在这个函数中,我需要提前指定/知道位数。这是丑陋和错误的:

list = ['a', 'b', 'c']

def listVariations1(list):
  variations = []
  for i in list:
    variations.append(i)
  return variations

def listVariations2(list):
  variations = []
  for i in list:
    for j in list:
      variations.append(i+j)
  return variations

def listVariations3(list):
  variations = []
  for i in list:
    for j in list:
      for k in list:
        variations.append(i+j+k)
  return variations

oneDigitList = listVariations1(list)
twoDigitList = listVariations2(list)
threeDigitList = listVariations3(list)
这可能非常简单,但我想不出在函数调用自身时连接字符串的好方法

谢谢你的努力:)


此函数正是您想要的。

您可以使用
itertools
中的函数。您可以使用
itertools.permutations
来执行此操作

from itertools import permutations

def listVariations(listOfItems, numberOfDigits):
    return [''.join(x) for x in permutations(listOfItems, numberOfDigits)]
如果您确实希望实现类似于递归函数调用的功能,可以这样做:

def permute(seq, n):
    for i in xrange(len(seq)):
        head, tail = seq[i:i+1], seq[0:i]+seq[i+1:]
        if n == 1: 
            yield head
        else:
            if tail:
                for sub_seq in permute(tail, n-1):
                    yield head + sub_seq
            else:
                yield head

a_list = ['a', 'b', 'c']
list(permute(''.join(a_list), 2))
a_str = 'abc'
list(permute(a_str, 2))

这仅适用于Python3.1或更高版本。无论如何都是不对的。Srinivas Reddy Thaipath给出了正确的答案。
list(“”.join(item)for itermools.product(list,repeat=3))这正是我想要实现的目标。谢谢大家:)你真的不应该用
list
作为变量名。它是内置的
列表
类的构造函数,当你这样做时,你会对它进行阴影处理。。。
def permute(seq, n):
    for i in xrange(len(seq)):
        head, tail = seq[i:i+1], seq[0:i]+seq[i+1:]
        if n == 1: 
            yield head
        else:
            if tail:
                for sub_seq in permute(tail, n-1):
                    yield head + sub_seq
            else:
                yield head

a_list = ['a', 'b', 'c']
list(permute(''.join(a_list), 2))
a_str = 'abc'
list(permute(a_str, 2))