在Python中使用.join()

时间:2012-12-07 06:01:28

标签: python

非常简单快速的问题。以此列表为例:

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

我希望在列表的最后一个元素之前使用'和'而不是逗号。所以我会得到:

  

你好1,你好2和你好3

而不是......

  

你好1,你好2,你好3

有没有办法使用.join()来实现这一目标?我知道我可以在列表中输入类似这样的简单示例,但我实际程序中需要的列表来自用户输入。

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:3)

SnakesAndCoffee拥有最好的方式。另一种(不太有用)的方式:

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

这里你使用两个joins - 内部join连接每个元素,直到倒数第二个元素和逗号。然后使用外部a[-1]将该字符串连接到最后一个元素(join),即and

答案 2 :(得分:3)

您需要将小型列表作为特殊情况处理:

def my_function(a):
    if a == []:
        return ""
    elif len(a) == 1:
        return a[0]
    else:
        return ', '.join(a[:-1])+' and '+ a[-1]

答案 3 :(得分:-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");