2014-05-10 65 views
0

我有一個腳本正在運行,我想在不同的變量之間切換。Python,切換腳本中的變量

假設我有一個網址列表,我想連接其中一個變量a,b或c。我並不在乎,但我希望重複這些變量,但列表會一次運行。

v最終會看起來像

  • 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) 
    

我能得到這個對我自己的工作,但我是新和學習,沒有任何人有一個更優雅的解決方案呢?

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 

返回結果是什麼我一直在尋找,但它的混亂:

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

回答

3

您可以利用itertools.cycle重複iterables之一,例如:

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 

注意的是,雖然cycle會重複其元素無止境,最短可迭代(list1izip停止。

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

編輯

好吧,這使得更多的正義 -

這個怎麼樣...

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 

雖然我感覺一樣你 - 有可能是一種更流暢的方式來實現這一點......

+0

我的歉意,我不認爲我解釋清楚。這將創建3個以URL1,URL2等開頭的變量。我只希望將來自LIST的記錄拉出一次,並從列表2中抽取一個隨機值。 – kmomo