2012-06-07 71 views
1

我想在jython中編寫一個函數,它將結合兩個不同列表中的元素來創建一個單詞。結合在jython中的兩個列表

例如:

的函數有兩個同時列出了名稱爲a和b

如果是["eat", "pray", "love"] 和b是["er", "ing", "d"] ,你在makeWord類型(A,B) 它會返回搭配:

["eater", "praying", "loved"] 

到目前爲止我有:

def makeWords(a,b): 
    a = [] 
    list1 = a 
    b = [] 
    list2 = b 
    new_list = [] 
    for word in list1: 
     new_list.append((list1[i] + list2[i])) 
    return new_list 

但我知道我顯然至少做了一些錯誤的事情。任何幫助將不勝感激!

回答

4

如何:

map(lambda x: ''.join(x), zip(list1, list2)) 

或者更易讀:

map(''.join, zip(list1, list2)) 
+0

這個lambda是不需要的,甚至:'map(''。join,zip(list1,list2))' – Hamish

+0

@Hamish:是的,我正在編輯它,甚至像你評論的那樣;-) – Cameron

2

這應該工作以及:

>>> a = ["eat", "pray", "love"] 
>>> b = ["er", "ing", "d"] 
>>> [start + end for start, end in zip(a, b)] 
['eater', 'praying', 'loved'] 

喬爾 - 科內特的timeit代碼:

import timeit 

a = ''' 
a = ["eat", "pray", "love"] 
b = ["er", "ing", "d"] 
[start + end for start, end in zip(a, b)] 
''' 

b = ''' 
a = ["eat", "pray", "love"] 
b = ["er", "ing", "d"] 
map(lambda x: ''.join(x), zip(a, b)) 
''' 

c = ''' 
a = ["eat", "pray", "love"] 
b = ["er", "ing", "d"] 
map(''.join, zip(a, b)) 
''' 

timeit.Timer(a).timeit(number=1000000) 
timeit.Timer(b).timeit(number=1000000) 
timeit.Timer(c).timeit(number=1000000) 
+0

''「 .join()'可能比解釋器中的字符串串聯更快。 –

+0

奇怪的是,沒有。此代碼的1000000次迭代花費了'1.1707520484924316'秒,而'''.join(x)'花費了2.0265748500823975秒。 – Blender

+1

我測試了所有三個塊,並且字符串連接結果是最快的。 – Blender