Python集合操作与作用域详解
立即解锁
发布时间: 2025-08-16 02:13:08 阅读量: 18 订阅数: 30 


Python编程实践:从入门到精通
### Python集合操作与作用域详解
#### 1. 集合的其他方法
集合除了常见的操作外,还有一些其他实用的方法:
- `add(element)`:将元素添加到集合中。如果元素已经存在于集合中,则不会产生任何效果(集合中的元素是唯一的)。该方法会修改集合,没有返回值。
- `clear()`:移除集合中的所有元素,使集合为空。
- `remove(element)` 和 `discard(element)`:这两个方法都用于移除集合中存在的元素。区别在于,如果要移除的元素不在集合中,`remove` 会引发错误,而 `discard` 不会。这两个方法都没有返回值。
- `copy()`:返回集合的浅拷贝。
#### 2. 集合的应用
集合有许多应用场景,主要可以分为以下两类:
- **查找唯一元素**:可以很方便地找出列表、文件等中的唯一元素。只需将每个元素添加到集合中,集合会自动处理重复元素。
- **使用集合运算符查找元素的各种组合**:通过集合的并集、交集、差集等操作,可以得到不同元素的组合。
#### 3. 不同文档单词关系分析
下面以《葛底斯堡演说》和《独立宣言》为例,比较两个文档中使用的单词,以了解文档之间的关系。
##### 3.1 可复用的函数及修改说明
- **add_word**:将每个单词添加到集合中,参数为单词和集合,无返回值。此函数需要根据集合的特点进行修改,使用 `add` 方法。
```python
def add_word(word, word_set):
'''Add the word to the set. No word smaller than length 3.'''
if len(word) > 3:
word_set.add(word)
```
- **process_line**:处理一行文本,去除各种字符,分割出单词等。参数为一行文本和集合,会调用 `add_word` 处理每个处理后的单词,无返回值。该函数可以直接使用,虽然参数名称在当前上下文中不太合适,但代码功能正常。
```python
import string
def process_line(line, word_set):
''' Process the line to get lowercase words to be added to the set.'''
line = line.strip()
word_list = line.split()
for word in word_list:
if word != '--':
word = word.strip()
word = word.strip(string.punctuation)
word = word.lower()
add_word(word, word_set)
```
- **pretty_print**:参数为两个文件的集合,无返回值。由于输出要求不同,该函数需要重新编写。
```python
def pretty_print(ga_set, doi_set):
# print some stats about the two sets
print('Count of unique words of length 4 or greater')
print('Gettysburg Addr: {}, Decl of Ind: {}\n'.format(len(ga_set),len(doi_set)))
print('{:15s} {:15s}'.format('Operation', 'Count'))
print('-'*35)
print('{:15s} {:15d}'.format('Union', len(ga_set.union(doi_set))))
print('{:15s} {:15d}'.format('Intersection', len(ga_set.intersection(doi_set))))
print('{:15s} {:15d}'.format('Sym Diff', len(ga_set.symmetric_difference(doi_set))))
print('{:15s} {:15d}'.format('GA-DoI', len(ga_set.difference(doi_set))))
print('{:15s} {:15d}'.format('DoI-GA', len(doi_set.difference(ga_set))))
# list the intersection words, 5 to a line, alphabetical order
intersection_set = ga_set.intersection(doi_set)
word_list = list(intersection_set)
word_list.sort()
print('\n Common words to both')
print('-'*20)
count = 0
for w in word_list:
if count % 5 == 0:
print()
print('{:13s}'.format(w), end=' ')
count += 1
```
- **main**:作为主程序,打开两个文件,为每个文件创建一个集合,使用 `process_line` 处理文件的每一行。处理完两个集合后,调用 `pretty_print` 输出信息。该函数需要进行一些小的修改。
```python
def main():
''' Compare the Gettysburg Address and the Declaration of Independence.'''
gettysburg_address_set = set()
declaration_of_independence_set = set()
gettysburg_file = open('gettysburg.txt')
declaration_independence_file = open('declOfInd.txt')
for line in gettysburg_file:
process_line(line, gettysburg_address_set)
for line in declaration_independence_file:
process_line(line,declaration_of_independence_set)
pretty_print(gettysburg_address_set, declaration_of_independence_set)
```
##### 3.2 输出及分析
运行 `main()` 函数后,输出结果如下:
```plaintext
Count of unique words of length 4 or greater
Gettysburg Addr: 100, Decl of Ind: 487
Operation Count
-----------------------------------
Union 556
Intersection 31
Sym Diff 525
GA-DoI 69
DoI-GA 456
Common words to both
--------------------
cause civil created earth equal
from full government great have
here liberty lives long nation
people power remaining shall should
that their these they this
those thus under which will
world
```
可以验证这些数字是合理的:
- 两个集合的元素总数为 587,但交
0
0
复制全文
相关推荐










