将字符串与循环组合
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 的组合频率从数据帧多索引转换为字符串