将字符串与循环组合

Posted

技术标签:

【中文标题】将字符串与循环组合【英文标题】:combine strings with cycles 【发布时间】:2016-05-17 20:37:25 【问题描述】:

我想在 python 2.7.11 中组合如下字符串 输入:

s1=['aapl','msft']
s2=['us']
s3=['bs','pl','cf']

想要的输出:

s0=['aaplusbs','aapluspl','aapluscf','msftusbs','msftuspl','msftuscf']

我已经尝试使用 itertools 和 itertools.cycle 来达到目的。这是最新的一段代码,但仍然没有给我想要的输出。

in>> ' '.join('%s%s%s' % i for i in zip(s1,itertools.cycle(s2),itertools.cycle(s3))).split()
out>> ['aaplusbs', 'msftuspl']

提前致谢。

【问题讨论】:

改用itertools.product(s1, s2, s3) 【参考方案1】:

@Siraj,您需要做一些额外的工作才能在 itertools.product(s1,s2,s3) 之上获得您想要的内容,如下所示。

import itertools

s1=['aapl','msft']
s2=['us']
s3=['bs','pl','cf']

ss = itertools.product(s1,s2,s3)
for s in ss:
    print(' '.join(s).replace(" ",""))

输出如下:

aaplusbs
aapluspl
aapluscf
msftusbs
msftuspl
msftuscf

对于像我这样想了解更多关于 itertools 的人,这里有参考,https://docs.python.org/2/library/itertools.html#itertools.product

【讨论】:

你为什么要' '.join(s).replace(" ","")?为什么不简单地''.join(s) vaultah,itertools.product 返回元组,如果你只加入,它之间会有一个空格。 aapl us bs aapl us pl aapl us cf msft us bs msft us pl msft us cf 运行for s in ss:print(''.join(s))。没有多余的空格。【参考方案2】:

这是我能做的

    >>> s1=['aapl','msft']
    >>> s2=['us']
    >>> s3=['bs','pl','cf']
    >>> s0=[]
    >>> 
    >>> for i in s1:
            for j in s2:
                for k in s3:
                    print i+j+k
                    s0.append(i+j+k)


    aaplusbs
    aapluspl
    aapluscf
    msftusbs
    msftuspl
    msftuscf
    >>> s0
    ['aaplusbs', 'aapluspl', 'aapluscf', 'msftusbs', 'msftuspl', 'msftuscf']
    >>> 

【讨论】:

以上是关于将字符串与循环组合的主要内容,如果未能解决你的问题,请参考以下文章

R:使用 for 循环将因子的级别部分匹配到字符串? [复制]

获取字符串的所有组合

将 collections.Counters 的组合频率从数据帧多索引转换为字符串

16 Python - 循环语句

在熊猫数据框中组合字符串在while-if-elif循环中只工作一次[重复]

生成所有槽数未知的组合