我有一个简单的问题,有没有办法让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”的内容
有什么建议吗?
答案 0 :(得分: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)
基于上述但有一些修正
答案 1 :(得分: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解释它任
答案 2 :(得分: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)
答案 3 :(得分: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个排列。
希望这有帮助。
答案 4 :(得分: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)]