避免对第一个和/或最后一个元素进行操作

时间:2016-04-06 02:49:52

标签: python string list

我有一个包含一些文字的列表:

my_list = ['sentence1','sentence2','sentence3','sentence4' ]

我希望输出一个像这样的字符串:

'sentence1, sentence2, sentence3, sentence4'

如果我这样做,我会在最后得到一个', '

string_sentences = ''
for sentence in my_list:
    string_sentences +=  sentence +', '
string_sentences

output: 'sentence1, sentence2, sentence3, sentence4, '

与此方法相同,但现在开始:

string_sentences = ''
for sentence in my_list:
    string_sentences += ', ' + sentence 
string_sentences

', sentence1, sentence2, sentence3, sentence4'

我能想到解决问题的唯一方法就是跟踪指数

string_sentences = ''
for i,sentence in enumerate(my_list):
    if i +1 < len(my_list):
        string_sentences += sentence +', '
    else:
        string_sentences += sentence
string_sentences

ouput: 'sentence1, sentence2, sentence3, sentence4'

但这似乎是一个非常常见的问题,我想知道是否是一种更加狡猾的解决方法。

2 个答案:

答案 0 :(得分:4)

使用join方法将列表转换为字符串。提供一个分隔符,该分隔符将在从列入字符串的列表中提取的每个元素之间进行。在这种情况下,和空格&#39} &#39;逗号后面:

my_list = ['sentence1','sentence2','sentence3','sentence4' ]
s = ', '.join(my_list)

通过打印,我们将:

'sentence1, sentence2, sentence3, sentence4'

关于为什么在这里使用join实际上更为可取的一些额外注释,是因为它实际上以C速度运行而不是从Python循环获得的速度。阅读有关效果提示here

最后,这样做时会发出警告。 join始终需要一个可迭代的字符串。这意味着,如果您有一个整数列表[1, 2, 3, 4]。您无法直接在此致电join。您必须将每个值转换为str。一个简单的例子是这样的:

list_of_ints = [1, 2, 3, 4]
', '.join([str(n) for n in list_of_ints])

所以,进一步解释上面例子中刚刚发生的事情。因为我们实际上有一个整数列表。为了从该列表成功创建我们的字符串,我们需要将列表中的每个元素转换为字符串。为此,我们将使用list-comprehension来创建这个字符串整数列表,然后调用你的join方法。

现在,我们实际上没有在这里使用生成器表达式并使用列表推导的原因是因为实际上join方法实际上会扫描迭代两次,因此在这种情况下的理解实际上更快。

这实际上很好地解释了here

答案 1 :(得分:1)

这是你想要的吗?

>>> my_list = ['sentence1','sentence2','sentence3','sentence4' ]
>>> ', '.join(my_list)
'sentence1, sentence2, sentence3, sentence4'
>>> 
>>> result = ', '.join(my_list)
>>> result
'sentence1, sentence2, sentence3, sentence4'
>>>