所以我想知道将列表转换成字符串的最"python式"的方法是什么。
例如:
1 2 3
| string_list = ['h', 'e', 'l', 'l', 'o']
# to the string
string = 'hello' |
我一直在使用''.join(string_list)方法,但感觉它几乎不可读和迂回的方法来做一些如此简单的事情。
有没有更好的方法,还是我把事情搞得太复杂了?
- 信不信由你,这是一种可读的方式,但它也有点python的东西。
- ''.join(list)已经是一种非常python化的方法了,您在寻找更好的效率吗?
- 另一个注意事项,不要调用你的列表list,你是在隐藏构建。
- 不是效率的问题,只是我觉得很丑。但如果这是正常的方式!
- 这是最有效的方法
不,这是python的方法。
也许你觉得应该这样写:string_list.join('')。你并不孤单。
可能最重要的优点是,这使.join()能够处理任何可迭代的东西。
如果反过来,每个集合都需要自己实现一个join()方法。如果您要创建自己的集合,您会添加.join()方法吗?可能不会。
事实上,它是str类的一个方法,这意味着它将始终工作。这并不令人意外。请阅读这里的Python和Flask作者Armin Ronacher撰写的关于join()和其他事情的最低惊奇原则。
len()函数/运算符也有类似的参数,可以在前面的文章开头找到。
- 非常感谢,好的文章和好的细节。
- 八卦评论提醒。来自(优秀的)链接文章:"装饰器有点麻烦,因为@foo和@foo()之间有区别。如果它们以前者意味着后者的方式被宣布,我们现在都会快乐得多。每次我想向以前的无参数装饰器引入一个参数时,我都想用棍子打自己和装饰器PEP的作者。"哈哈确实!
使用''.join(string_list)。注意list为内置类型命名,因此不应该将其用于变量名。由于Python字符串是不可变的,所以无论如何都需要构造一个新字符串。''.join(s)是在Python中实现这一点的规范而有效的方法。
- 难道没有更有效的方法吗?因为我一直认为''.join(s)就像写s[0]+''+s[1]+''+s[2]+''+s[3]...s[x] ?
- 难道没有办法去做吗?
- @InbarRose +方法创建了n临时副本。str.join方法在单个预传递中保留所需的空间。因此,在非平凡的情况下,.join方法的性能将优于naive +操作符,特别是在需要连接许多字符串的情况下
- .join() string方法实际上是Python中组装多部分字符串的最有效方法。字符串添加比较慢,因为它创建了许多字符串:首先它创建s[0]+'',然后向生成的字符串添加s[1]来创建另一个字符串。.join()只创建一个字符串。
- 是的,我知道它可以一次完成所有的操作,问题是,如果我没有在不同的部分之间放置任何东西,比如''.join(s),有没有更好的方法?我完全可以理解如果使用', '.join(s)如何更有效,但是当列表中的值之间没有什么可以放置的时候?
- @InbarRose不管"gap"是如何填充的,n仍然需要创建新的字符串,除了最后一个字符串之外,其他字符串都是临时的,因为在AST中扩展和处理+操作符重载的方法很简单
- 啊,现在你这么说就更有道理了,我想是有什么东西突然灵光一现:)
- @InbarRose也会在''.join的seplen为0的情况下执行memcpy,所以实际上不会复制任何东西。
我觉得你太复杂了。以下来自python本身:
1 2 3 4 5
| >>> list = ['h', 'e', 'l', 'l', 'o']
>>> sum(list, '')
Traceback (most recent call last):
File"<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead] |
因此,python的建议是使用''.join。
- 这不是OP问的。他想把一个字符串列表转换成一个由列表中的所有字符串组成的字符串。
- 这是老方法了
- 嗯,我刚刚提交了python对给定问题的答案(将字符串列表转换为字符串)。