2016-05-17 8 views
0

Ich möchte Zeichenkette kombinieren wie unten in Python 2.7.11 Eingang:kombinieren Strings mit Zyklen

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

gewünschte Ausgabe:

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

Ich habe versucht itertools und itertools.cycle für die Verwendung von Zweck. Hier ist das neueste Stück Code, das mir nahe kommt, aber immer noch nicht die gewünschte Ausgabe liefert.

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

danke im voraus.

+2

Verwenden Sie 'itertools.product (s1, s2, s3)' stattdessen – vaultah

+0

funktioniert perfekt. danke für Ihre Hilfe. –

Antwort

0

@Siraj, Sie müssen ein wenig zusätzliche Sachen tun, um genau das zu bekommen, was Sie über itertools.product (s1, s2, s3) wie unten wollen.

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(" ","")) 

Nachgeben Ausgänge wie folgt:

aaplusbs 
aapluspl 
aapluscf 
msftusbs 
msftuspl 
msftuscf 

Für diejenigen, die mehr über itertools wie ich wissen will, hier geht Referenz, https://docs.python.org/2/library/itertools.html#itertools.product

+0

Warum hast du '' '.join (s) .replace ("", "") '? Warum nicht einfach '' '.join (s) '? – vaultah

+0

vaulltah, itertools.product gibt Tupel zurück, und wenn Sie nur beitreten, wird es einen Abstand dazwischen haben. 'AAPL uns bs AAPL uns pl AAPL uns cf msft uns bs msft uns pl msft uns ' – GoGo

+0

Run 's für in ss cf: print (. '' Beitreten (en))'. Es gibt keine zusätzlichen Leerzeichen. – vaultah

0

das, was ich tun kann,

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