2012-12-07 26 views
3

非常簡單和快速的問題。以這個列表爲例:在Python中使用.join()

a = ['hello1', 'hello2', 'hello3'] 
','.join(a) 

我想在列表的最後一個元素之前有'和'而不是逗號。所以,我會得到:

你好1,你好2和3打招呼

代替....

你好1,2你好,你好3

有沒有辦法使用.join()來完成這項工作?我知道我可以在列表中輸入它,就像這樣一個簡單的例子,但我在我的實際程序中需要的列表來自用戶輸入。

+2

' ''。加入(A [: - 1])+ '和' + A [-1]'可能是你最好的選擇。這沒有內建函數。 –

回答

7

實質上,你想分別處理列表的兩部分,第一部分包括除最後一個字符串以外的所有部分,另一部分由最後一個字符串組成。

def my_func(lst): 
    return ', '.join(lst[:-1])+' and '+lst[-1] 

或使用Lambda:

f = lambda x: ', '.join(x[:-1]) + ' and '+x[-1] 

,或者如果你只是希望它運行一次:

result = ', '.join(a[:-1]) + ' and ' + a[-1] 
+0

感謝您的快速回復。 – Ace

+0

此解決方案沒有考慮到只有一個元素的空列表或列表 – marianosimone

3

SnakesAndCoffee擁有最好的方式(S)。另一個(用處不大)方式:

>>> a = ['hello1', 'hello2', 'hello3'] 
>>> ' and '.join((', '.join(a[:-1]), a[-1])) 
'hello1, hello2 and hello3' 

這裏使用兩個joins - 內join加入每一個元素,直到第二個用逗號最後一個元素。然後使用外部join(即and)將該字符串連接到最後一個元素(a[-1])。

+0

感謝您的替代方法。 – Ace

+0

@ TheDragonAce完全沒問題:) – RocketDonkey

3

您需要處理小清單作爲特殊情況:

def my_function(a): 
    if a == []: 
     return "" 
    elif len(a) == 1: 
     return a[0] 
    else: 
     return ', '.join(a[:-1])+' and '+ a[-1] 
-1
list=[] for i in range(no): for j in range(no-i): 
     list.append(j+1); if(i!=0): 
     for a in range(2*i-1): 
      list.append(" "); for k in range(no-i,0,-1): 
     if(i==0 and k==no): 
      pass; 
     else: 
      list.append(k); list.append("\n");