Python:如何将集合中的条目连接成一个字符串?


84

基本上,我试图将一组条目合并在一起以输出一个字符串。我正在尝试使用类似于列表的加入功能的语法。这是我的尝试:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

但是我得到这个错误: AttributeError: 'set' object has no attribute 'join'

集合的等效调用是什么?

Answers:


165
', '.join(set_3)

join是一个字符串的方法,没有一套方法。


谢谢!我是一个红宝石程序员,所以这对我来说是全新的。
斯宾塞

14
如果您的集合包含整数/长整数,则必须使用', '.join(str(s) for s in set_3)
55651909-089b-4e04-9408-47c5bf 2013年

grrr python join
Robert Moskal

对我来说有点倒退,但这是对的。提出一个问题:是关于逗号还是关于列表内容?
Ivotje50

31

集合没有join方法,但是您可以使用它str.join

', '.join(set_3)

str.join方法将适用于任何可迭代对象,包括列表和集合。

注意:在包含整数的集合上使用时要小心;您需要在调用加入之前将整数转换为字符串。例如

set_4 = {1, 2}
', '.join(str(s) for s in set_4)


4

set没有list拥有这样的方法join,字符串也没有:

','.join(set(['a','b','c']))

顺便说一句,您不应将名称list用作变量。给它一个list_my_list或者一些其他的名字,因为list是很经常使用Python函数。


4

集合没有订单-因此,当您将列表转换成集合时,可能会丢失订单,即:

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

通常,该顺序将保留,但对于大型设备,几乎可以肯定不会。

最后,以防万一人们想知道,您在联接中不需要','。

只是:''.join(set)

:)



3

您可以将join语句向后尝试:

print ', '.join(set_3)

0

我编写了一种处理以下边缘情况的方法:

  • 设置尺寸一。A", ".join({'abc'})将返回"a, b, c"。我想要的输出是"abc"
  • 设置包括整数。
  • 空集应返回 ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))

本可以用来" ".join({'abc'})获得所需的o / p "abc"repl.it中的可执行代码
Abhijeet

有趣。刚刚意识到set('abc')和{'abc'}具有不同的行为。那就是让我失望的原因。
FernandoIrarrázavalG

我已经更新了可执行代码,可用于设置词典
Abhijeet

仅供参考,{'abc'}是一组。并"".join(set(ip_data))给出字母的随机顺序(例如,“ bca”),因为set创建了三个元素{'a','b','c'},但不保留顺序。
FernandoIrarrázavalG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.