【问题标题】: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)

标签: python string itertools


【解决方案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']
    >>> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2015-03-25
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多