2016-11-17 7 views
2

長さに応じてカンマとアンパサンドを使ってPythonの文字列リストを分割したいと思います。例えば長さに応じてカンマとアンパサンドを使用してPythonの文字列リストを分離する方法は?

>>> my_list = ['a'] 
>>> foo(my_list) 
a 


>>> my_list = ['a', 'b'] 
>>> foo(my_list) 
a & b 

>>> my_list = ['a', 'b', 'c'] 
>>> foo(my_list) 
a, b & c 
+0

あなたは3つの要素よりも長い私たちのリストの例を与えることができます:

あなたはpython2で似た何かを行うことができますか? – Fejs

+0

a、b、c&d(3つ以上の要素) – user5319825

+0

更新された回答を確認してください – Backtrack

答えて

5

あなたは1つのライナー使用することができます以下

>>> l = ['a', 'b', 'c'] 
>>> ' & '.join(', '.join(l).rsplit(', ', 1)) 
'a, b & c' 

それ意志', 'joinすべての項目、最後から続いsplit', 'およびjoinであり、再び' & 'である。あなたの商品に', 'が含まれていない場合にのみ機能します。

+0

コンマを含むことができる文字列がリストに含まれていると、この解決策に問題が生じる可能性があります。 – Ben

+0

@Ben Commaだけでは問題は発生しません。カンマと、 'rsplit'のパラメータである空白が続きます。それでもリストの最後の項目だけにこの制限があります。上記の '' b''を '' b、d ''に置き換えると、 '' a、b、d&c ''が得られます。 – niemmi

+0

実際には、データを制御しない場合は許容できない制限です – Ben

4
ll = ['a'] 
length = len(ll) 
if length >1 : 
    output_str = ', '.join(ll[:-1]) 
    output_str = output_str + ' & ' +ll[length-1] 
else: 
    output_str = ''.join(ll) 

print(output_str) 
+0

回答ありがとうございますが、1つの値で間違っています。>>> ll = ['a'] – Shameem

+0

@ShameemPKS、 – Backtrack

0

これは、あなたが欲しいものを行う必要があります。

def list_to_str(lst): 
    remaining = len(lst) 
    out = "" 
    for item in lst: 
     out += str(item) + " " 
     remaining -= 1 
     if remaining == 0: 
      return out 
     elif remaining == 1: 
      out += "& " 
     else: 
      out = out[:-1]+ ", " 
1

たぶんLEN()関数で、例を使用します。

 

seperator = len(list) - 1 
list[seperator].insert("&") 

0

あなたはこのようにそれを行うことができます。

def foo(a): 
    if len(a) > 1: 
     return ' & '.join([', '.join(a[:-1]), a[-1]]) 
    if len(a) == 1: 
     return a[0] 
0

あなたのpython 3を使用している場合は、より高度な解凍を使用することができます。

>>> *a, b = ['a'] 
>>> ' & '.join([', '.join(a), b]) if a else b 
'a' 
>>> *a, b = ['a', 'b'] 
>>> ' & '.join([', '.join(a), b]) if a else b 
'a & b' 
>>> *a, b = ['a', 'b', 'c'] 
>>> ' & '.join([', '.join(a), b]) if a else b 
'a, b & c' 

開梱店のすべての要素が、中の最後の1 aと最後の要素はbです(空のリストはエラーを生成しますが、それは簡単に処理できます)。これはまさに特殊なセパレータの分割であり、正しく結合するために上昇させることができます。

>>> lst = ['a', 'b', 'c'] 
>>> *a, b = lst[:-1], lst[-1] 
関連する問題