初学者Python集合交集错误

5
rare = (["word1","word4","word5"])
freq = (["word1","word2","word3"])
unique = rare.intersection(freq)
print unique

错误: AttributeError: 'list'对象没有属性'intersection'

我没有正确创建集合吗?它们看起来和文档中的示例相似--但我似乎无法在它们上面使用普通集合方法。

如果这些是列表,创建集合的正确语法是什么?

7个回答

8

这样你就不是在创建集合(set),而是在创建普通列表(list)。使用set函数:

rare = set(["word1","word4","word5"])
freq = set(["word1","word2","word3"])

也许你把set和tuple混淆了。tuple用括号包围表达式创建,但至少要加上一个逗号:
("this", "is", "a", "tuple")
("anotherone",)

Tuples(元组)就像不可变的列表,但它们不是集合。


谢谢,那让我烦死了。 - some1
1
很高兴能帮到你!如果你正在使用最新版本的Python,也可以看看Tavian Barnes的答案,因为它更加简洁。 - mgibsonbr

4

在Python 2.7+中,这是使用set operators:进行交集的语法。

>>> rare = {"word1", "word4", "word5"}
>>> freq = {"word1", "word2", "word3"}
>>> rare & freq
{'word1'}

3
你需要这个:
rare = {"word1", "word4", "word5"}
freq = {"word1", "word2", "word3"}
unique = rare.intersection(freq)
print(unique)

请注意,Python 2.7已经向后移植了集合字面量的语法。

@JoelCornett:为什么不行呢?它可以编译通过,可以正常执行,并且实现了OP想要的功能。 - Michael Foukarakis
2
@MichaelFoukarakis 我认为这取决于Python版本。例如,2.5不接受它,而2.7则可以。 - mgibsonbr

1
unique = set(rare).intersection(freq)
print(unique)

这是更加简洁的做法。 - coder3

1

你可以像这样做,它更短,我想:

rare = (["word1","word4","word5"])
freq = (["word1","word2","word3"])
unique = set(rare).intersection(set(freq))
print(unique)

0
你的解决方案有问题,因为'rare'和'freq'对象都是数组。它们必须转换为集合数据类型。我使用'&'而不是'intersection',因为它看起来更整洁。
unique = set(rare) & set(freq)
print(unique)

-1

这对我有效

unique = set(rare).intersection(freq)
print(len(unique))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接