13

我是 python 新手,这只是为了在我的 PC 上自动化一些东西。我想连接列表中的所有项目。问题是

''.join(list)

不起作用,因为它不是字符串列表。

这个网站http://www.skymind.com/~ocrow/python_string/说最有效的方法是

''.join([`num` for num in xrange(loop_count)])

但这不是有效的python ...

有人可以解释在 string.join() 中包含这种循环的正确语法吗?

4

4 回答 4

19

您需要使用str()构造函数将列表中的所有内容转换为字符串:

''.join(str(elem) for elem in lst)

请注意,使用list变量名通常不是一个好主意,它会隐藏内置list构造函数。

我在那里使用了一个生成器表达式来将str()构造函数应用于列表中的每个元素。另一种方法是使用map()函数

''.join(map(str, lst))

您示例中的反引号是调用repr()值的另一种拼写,与 ; 略有不同str()。你可能想要后者。因为它违反了 Python 的“应该有一种——最好只有一种——明显的方式来做到这一点”的原则。,反引号语法已从 Python 3 中删除。

于 2012-08-15T10:14:26.820 回答
6

这是另一种方式(讨论是关于 Python 2.x):

''.join(map(str, my_list))

该解决方案将具有最快的性能,并且看起来不错且简单 imo。使用生成器不会更有效。实际上,这会更有效,因为''.join必须根据元素的长度为字符串分配确切的内存量,因此无论如何在创建字符串之前都需要消耗整个生成器。

请注意,``它已在 Python 3 中删除,不再使用它不是一个好习惯,str()如果必须使用,请使用更明确。str(num).

于 2012-08-15T10:15:00.050 回答
2

只需使用它,不需要[]和使用str(num)

''.join(str(num) for num in xrange(loop_count))  

对于列表,只需替换xrange(loop_count)为列表名称。

例子:

   >>> ''.join(str(num) for num in xrange(10)) #use range() in python 3.x
    '0123456789'
于 2012-08-15T10:13:37.980 回答
2

[x for x in ...]如果您的 Python 对于“列表推导”(奇怪的语法)来说太旧了,请使用map()

 ''.join(map(str, list))
于 2012-08-15T10:15:41.370 回答