2014-05-10 12 views
0

J'ai un script en cours d'exécution que je veux basculer entre différentes variables. Disons que j'ai une liste d'URL et que je veux concaténer l'une des variables a, b ou c. Je ne m'inquiète pas mais je m'attendrais à ce que les variables se répètent, mais la liste se déroulerait une fois.Python, bascule les variables dans un script

v finirait par ressembler à

  • url1+string1
  • url2+string2
  • url3+string3
  • url4+string1
  • url5+string2
  • etc

    def function1(): 
    
        list = [url1,url2,url3,url4,url5.......] 
    
        a = 'string1' 
        b = 'string2' 
        c = 'string3' 
    
    
        for i in list: 
         v = i+(a then b then c then a then b then c) 
    

j'ai pu obtenir ce travail sur moi-même mais je suis nouveau et l'apprentissage, quelqu'un at-il une solution plus élégante à cela?

a = 'a' 
b = 'b' 
c = 'c' 

list1 = ['string1','string2','string3','string4','string5','string6','string7','string8'] 
list2 = [a, b, c] 
c = 0 
for i in list1: 
    if c == len(list2): 
     c = 0 
    vv = i + list2[int(c)] 
    c = c + 1 
    print vv 

retourne ce que je cherchais, mais il est en désordre:

  • string1a
  • string2b
  • string3c
  • string4a
  • string5b
  • string6c
  • string7a
  • string8b

Répondre

3

Vous pouvez utiliser itertools.cycle répéter l'un des iterables, par exemple:

from itertools import cycle, izip 

list1 = ['string1','string2','string3','string4','string5','string6','string7','string8'] 
list2 = ['a', 'b', 'c'] 

for fst, snd in izip(list1, cycle(list2)): 
    print fst + snd # or whatever 

#string1a 
#string2b 
#string3c 
#string4a 
#string5b 
#string6c 
#string7a 
#string8b 

Notez que tout cycle répétera indéfiniment ses éléments, izip arrêts les plus brefs itérables (list1).

0
list = [url1..1] 
list2 = [a, b, c] 
for i in list: 
    for a in list2: 
     v = i+a 

EDIT

D'accord, qui fait plus sens-

Que diriez-vous ... ce

set_it = iter(list2) 
for i in list: 
    try: 
     a = set_it.next() 
    except: 
     set_it = iter(list2) 
     a = set_it.next() 
    v = i+a 

Bien que je me sens la même chose que vous- il y a probablement un moyen plus facile d'accomplir cela ...

+0

Mes excuses, je ne pense pas que je l'ai expliqué clairement. Cela va créer 3 variables qui commencent par URL1, URL2, etc. Je veux seulement que les enregistrements de LIST soient tirés une fois et tirent une valeur aléatoire de list2. – kmomo

Questions connexes