首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python混洗和打印字符串,不带反转字符串

python混洗和打印字符串,不带反转字符串
EN

Stack Overflow用户
提问于 2018-06-26 05:22:13
回答 3查看 78关注 0票数 0

假设我有字符串,s='AADD'。我使用了more_itertools和distinct permutation,这将打印出(AADD,ADDA,DDAA,ADAD,DADA,DAAD)

我的问题是,因为AADDDDAAADADDADA本质上是彼此的镜像,我想摆脱其中的一个,我应该如何修改我的代码来实现这一点?

代码语言:javascript
复制
import more_itertools

s = 'AADD'
#counting = 0
for i in more_itertools.distinct_permutations(s):
    print(''.join(i))
    #counting += 1

更新:关于大量数据处理,我还有另一个问题。假设我的字符串"s“有50个字母而不是4个,我想知道"more_itertools”中的"distinct_permutation“是不是最有效的方法?我用Mathematica计算了所有可能的组合,有超过100亿种可能的组合,我想知道是否有更快的方法来完成这项任务。如果这个问题很愚蠢,请提前道歉,因为我没有上过任何编码课程,在做项目的同时我自己也在学习编码。

EN

回答 3

Stack Overflow用户

发布于 2018-06-26 06:19:12

这是一个不使用reverse / reversed的解决方案。这是基于这样的逻辑:对于给定的字符串ww[::-1]将是相反的字符串。

代码语言:javascript
复制
>>> import more_itertools
>>> s_list = list(map(''.join, more_itertools.distinct_permutations('AADD')))
>>> [w for w in s_list if w <= w[::-1]]
['ADDA', 'DAAD', 'ADAD', 'AADD']
票数 2
EN

Stack Overflow用户

发布于 2018-06-26 06:01:41

一个简单的单行解决方案,不需要临时集合或列表,通过利用“大于或等于”运算符在python中的序列上工作的事实:

代码语言:javascript
复制
>>> from more_itertools import distinct_permutations
>>> [''.join(l) for l in distinct_permutations('AADD') if l >= l[::-1]]
['DDAA', 'DADA', 'ADDA', 'DAAD']
票数 1
EN

Stack Overflow用户

发布于 2018-06-26 05:28:33

您可以在此处使用reversed()

代码语言:javascript
复制
import more_itertools

s = 'AADD'

options = [i for i in more_itertools.distinct_permutations(s)]

no_mirrors = []
for i in options:
    if tuple(reversed(i)) not in no_mirrors:
        no_mirrors.append(i)

for i in no_mirrors:
    print(''.join(i))

输出:

代码语言:javascript
复制
DDAA
DADA
ADDA
DAAD
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51031968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档