0

我有一个简单的问题,有没有办法让 python 组合一系列字符,组合它们,然后将它们放入文本文件中?

我的意思是,如果我有字符,“a”,“b”,“3”,“F”,“@”等,有没有办法以各种方式组合它们来制作,“abF”, “F@b”、“3F@ab”等,然后将它们分别打印在文本文件的单独行上?

到目前为止,我得到的是:

lst = ("ab@F3")
list1 = list()
for ch in lst:
    list1.append(ch)
    print(list1)

我希望它能够输出类似“abF3”和“3Fab”和“Fb3a”的东西

有什么建议么?

4

5 回答 5

3
import itertools
with open('output.txt', 'w') as f:
    for n in range(1,5):
        for p in itertools.permutations('ab@F3',n):
            print(''.join(p), file=f)

基于上述但有一些修复

于 2013-11-08T01:00:32.743 回答
2

从您的示例输出中,您似乎想要 5 元素集的所有 120 个 4 元素排列。这很简单itertools.permutations

list1 = list(itertools.permutations(lst, 4))

您似乎也希望它们以随机顺序排列,但这很容易:

random.shuffle(list1)

如果您想要任意数量的字符的所有排列(嗯,从 1 到 5 的任意数字),您只需将permutations每个数字链接在一起:

perms = (itertools.permutations(lst, n) for n in range(1, 6))
list1 = list(itertools.chain.from_iterable(perms))

其中有 120+120+60+20+5=325 个。同样,如果您希望它们以随机顺序排列,只需shuffle它们即可。

几乎任何你想做的合理的事情都会很容易做到——但除非你知道并且可以向人类解释你真正想要的是什么,否则你也无法向 Python 解释它。

于 2013-11-08T01:04:47.513 回答
1

这不是 100% 清楚你的意思,但我想这就是你想要的:

import itertools

chain = itertools.chain(*(itertools.permutations(chars, n) for n in xrange(1, len(chars) + 1)))
print ' AND '.join('"%s"' % ''.join(x) for x in chain)
于 2013-11-08T01:13:02.933 回答
0

试试这个。

from itertools import permutations
chars = 'ab@F3'
for r in range(len(chars)):
    for p in permutations('ab@F3', r+1):
        print ''.join(p)

你会得到这些字符的每一个排列。在这个例子中,有 325 个排列。

希望这可以帮助。

于 2013-11-08T01:05:21.053 回答
0

一种线性(列表理解)方法(因为我不想添加重复的答案)

import itertools
my_chars = "ab3F@"
print [''.join(p) for i in range(1, len(my_chars)+1) for p in itertools.permutations(my_chars,i)]
于 2013-11-08T01:09:44.453 回答