【问题标题】:Combine characters and output to file组合字符并输出到文件
【发布时间】:2013-11-08 00:53:20
【问题描述】:

我有一个简单的问题,有没有办法让 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”的东西

有什么建议吗?

【问题讨论】:

  • 为什么@没有包含在最后一个例子中?
  • 你知道这 5 个字符有 3905 种任意长度的可能排列吗?
  • 基本上你想要你列表的powerset中每个元素的所有排列?
  • @ShashankGupta:我不认为他想要那个;他只想要所有 120 个 4 元素排列,或者 [1, 5] 中任何 N 的所有 120+120+60+20+5=325 个 N 元素排列。不管怎样,这比你建议的要合理得多。
  • @abarnert 是的,我的数学错了。 :P 对不起。

标签: python python-3.x output


【解决方案1】:
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)

基于上述但有一些修复

【讨论】:

    【解决方案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 解释它。

    【讨论】:

      【解决方案3】:

      不是 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)
      

      【讨论】:

        【解决方案4】:

        试试这个。

        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 个排列。

        希望这会有所帮助。

        【讨论】:

        • 我不知道这是在做什么,但不管它是什么,它都做错了。您正在尝试将每个 2 元素排列与从 1 到 5 的每个数字连接起来。为什么?
        • 谢谢@abarnert!我将permutations 的第二个参数放到join 调用中。已更正,谢谢!
        【解决方案5】:

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

        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)]
        

        【讨论】:

        • 你刚刚拿走了我的两行,然后把它变成了一个超过 80 个字符的行。这有什么意义?
        • 哈哈,在写我的之前我没有看到你的答案。但是,我的并不完全是你的复制品。至少比其他重复的答案好。 :|
        猜你喜欢
        • 2018-12-29
        • 2021-02-19
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 2012-08-06
        相关资源
        最近更新 更多