2014-05-10 37 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