2017-10-07 15 views
4

こんにちは初めてのポスターです。項目数に応じたリストのカスタム文字列表現(Python)

例えば:私は異なり、それが持っているアイテムの数に応じて、リストをプリントアウトする必要が

["Cat"]すなわち無項目について

  • []、すなわちすべき1つの項目については、出力{}
  • べき出力{Cat}
  • を出力すると、 ["Cat", "Dog"]と表示されます。3つの以上の項目については
  • すなわち["Cat", "Dog", "Rabbit", "Lion"]を出力すべき{Cat, Dog, Rabbit and Lion}

私は現在、if文の束と、このような何かをやっている:

def customRepresentation(arr): 
    if len(arr) == 0: 
    return "{}" 
    elif len(arr) == 1: 
    return "{" + arr[0] + "}" 
    elif len(arr) == 2: 
    return "{" + arr[0] + " and " + arr[0] + "}" 
    else: 
    # Not sure how to deal with the case of 3 or more items 

これを行うにはより多くの神託の方法はありますか?

答えて

1

単語にカンマ自体は含まれないと仮定します。あなたはだけでなく1行ですべてのケースに対処するためにjoinreplaceを使用することができます。

>>> def custom_representation(l): 
... return "{%s}" % " and ".join(l).replace(" and ", ", ", len(l) - 2) 
... 
>>> for case in [], ["Cat"], ["Cat", "Dog"], ["Cat", "Dog", "Rabbit", "Lion"]: 
... print(custom_representation(case)) 
... 
{} 
{Cat} 
{Cat and Dog} 
{Cat, Dog, Rabbit and Lion} 
+0

単語自体にカンマが含まれている場合は注意してください。 –

+0

'、'で結合し、最後のものだけを 'と'で置き換える方が効率的かもしれませんか? –

+1

単語にカンマ自体は含まれません。 – XaddieMiegler

1

ここに私はこのことについていいと思う方法は次のとおりです。

class CustomList(list): 

    def __repr__(self): 

     if len(self) == 0: 
      return '{}' 
     elif len(self) == 1: 
      return '{%s}' % self[0] 
     elif len(self) == 2: 
      return '{%s and %s}' % (self[0], self[1]) 
     else: 
      return '{' + ', '.join(str(x) for x in self[:-1]) + ' and %s}' % self[-1] 

>>> my_list = CustomList() 
>>> my_list 
{} 
>>> my_list.append(1) 
>>> print(my_list) 
{1} 
>>> my_list.append('spam') 
>>> print(my_list) 
{1 and spam} 
>>> my_list.append('eggs') 
>>> my_list.append('ham') 
>>> print(my_list) 
{1, spam, eggs and ham} 
>>> my_list 
{1, spam, eggs and ham} 

あなたは完全に機能するlistを持っているので、表現だけがカスタマイズされています。

関連する問題