Python的数据结构的方法和最佳实践

Python 提供了丰富的数据结构,每种数据结构都有其独特的方法和最佳实践。了解并合理运用这些数据结构,对于编写高效、可维护的代码至关重要。在本文中,我们将详细探讨列表、元组、字典和集合的常用方法及其最佳实践。

列表(List)

常用方法fruits = ['apple', 'banana'] fruits.append('cherry') print(fruits) # 输出: ['apple', 'banana', 'cherry']
  1. extend(iterable): 通过添加一个可迭代对象中的所有元素来扩展列表。

    fruits = ['apple', 'banana'] fruits.extend(['cherry', 'date']) print(fruits) # 输出: ['apple', 'banana', 'cherry', 'date']

  2. insert(i, x): 在指定位置 i 插入元素 x

    fruits = ['apple', 'banana'] fruits.insert(1, 'cherry') print(fruits) # 输出: ['apple', 'cherry', 'banana']

  3. remove(x): 删除列表中第一个值为 x 的元素。如果没有这样的元素,则抛出 ValueError

    fruits = ['apple', 'banana', 'cherry'] fruits.remove('banana') print(fruits) # 输出: ['apple', 'cherry']

  4. pop([i]): 删除列表中指定位置 i 的元素,并返回该元素。如果没有指定位置,则删除并返回最后一个元素。

    fruits = ['apple', 'banana', 'cherry'] last_fruit = fruits.pop() print(last_fruit) # 输出: 'cherry' print(fruits) # 输出: ['apple', 'banana']

  5. clear(): 移除列表中的所有元素。

    fruits = ['apple', 'banana', 'cherry'] fruits.clear() print(fruits) # 输出: []

  6. index(x, [start, [end]]): 返回列表中第一个值为 x 的元素的索引。如果没有这样的元素,则抛出 ValueError

    fruits = ['apple', 'banana', 'cherry'] index = fruits.index('banana') print(index) # 输出: 1

  7. count(x): 返回 x 在列表中出现的次数。

     

    fruits = ['apple', 'banana', 'banana', 'cherry'] count = fruits.count('banana') print(count) # 输出: 2

  8. sort(key=None, reverse=False): 就地排序列表中的元素。

    fruits = ['cherry', 'apple', 'banana'] fruits.sort() print(fruits) # 输出: ['apple', 'banana', 'cherry']

  9. reverse(): 就地反转列表中的元素。

    fruits = ['cherry', 'apple', 'banana'] fruits.reverse() print(fruits) # 输出: ['banana', 'apple', 'cherry']

  10. copy(): 返回列表的浅复制。

    fruits = ['apple', 'banana', 'cherry'] fruits_copy = fruits.copy() print(fruits_copy) # 输出: ['apple', 'banana', 'cherry']

最佳实践
  1. 使用列表推导式:提高代码的可读性和执行效率。

    # 传统方法 squares = [] for x in range(10): squares.append(x**2) # 列表推导式 squares = [x**2 for x in range(10)]

  2. 避免不必要的复制:尽量在原地修改列表,而不是创建新的列表。

    # 不推荐 new_list = old_list[:] # 推荐 old_list.clear() old_list.extend(new_elements)

  3. 使用 enumerate():在遍历列表时需要索引时使用 enumerate()

    fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(index, fruit)

  4. 用内置函数操作列表:如 sum(), min(), max() 等,能简化代码。

    numbers = [1, 2, 3, 4, 5] total = sum(numbers) print(total) # 输出: 15

元组(Tuple)

常用方法
  1. count(x): 返回 x 在元组中出现的次数。

    fruits = ('apple', 'banana', 'banana', 'cherry') count = fruits.count('banana') print(count) # 输出: 2

  2. index(x, [start, [end]]): 返回元组中第一个值为 x 的元素的索引。如果没有这样的元素,则抛出 ValueError

    fruits = ('apple', 'banana', 'cherry') index = fruits.index('banana') print(index) # 输出: 1

最佳实践
  1. 使用元组拆包:简化变量赋值和交换。

    # 拆包 fruits = ('apple', 'banana', 'cherry') fruit1, fruit2, fruit3 = fruits print(fruit1, fruit2, fruit3) # 输出: apple banana cherry # 交换变量 a, b = 1, 2 a, b = b, a print(a, b) # 输出: 2 1

  2. 用作字典键:利用元组的不可变性,将元组用作字典键。

    locations = { ('40.7128N', '74.0060W'): "New York", ('34.0522N', '118.2437W'): "Los Angeles" }

  3. 存储多类型数据:元组适合存储异质数据。

    person = ("John Doe", 30, "New York")

字典(Dictionary)

常用方法
  1. keys(): 返回字典中的所有键。

    student = {'name': 'John', 'age': 25} keys = student.keys() print(keys) # 输出: dict_keys(['name', 'age'])

  2. values(): 返回字典中的所有值。

    student = {'name': 'John', 'age': 25} values = student.values() print(values) # 输出: dict_values(['John', 25])

  3. items(): 返回字典中的所有键值对。

    student = {'name': 'John', 'age': 25} items = student.items() print(items) # 输出: dict_items([('name', 'John'), ('age', 25)])

  4. get(key, default=None): 返回指定键的值,如果键不在字典中返回 default

    student = {'name': 'John', 'age': 25} age = student.get('age') gender = student.get('gender', 'Unknown') print(age) # 输出: 25 print(gender) # 输出: Unknown

  5. update([other]): 使用字典或可迭代对象中的键值对更新字典。

     

    student = {'name': 'John', 'age': 25} student.update({'age': 26, 'phone': '555-5555'}) print(student) # 输出: {'name': 'John', 'age': 26, 'phone': '555-5555'}

  6. pop(key, [default]): 删除字典中指定键的项,并返回该值。如果键不存在,且未指定 default,则抛出 KeyError

     

    student = {'name': 'John', 'age': 25} age = student.pop('age') print(age) # 输出: 25 print(student) # 输出: {'name': 'John'}

  7. popitem(): 删除并返回字典中的最后一个键值对。字典为空时抛出 KeyError

     

    student = {'name': 'John', 'age': 25} last_item = student.popitem() print(last_item) # 输出: ('age', 25) print(student) # 输出: {'name': 'John'}

  8. clear(): 移除字典中的所有项。

     

    student = {'name': 'John', 'age': 25} student.clear() print(student) # 输出: {}

  9. setdefault(key, default=None): 如果键存在,返回其值;如果键不存在,插入键并设置默认值。

     

    student = {'name': 'John'} age = student.setdefault('age', 25) print(age) # 输出: 25 print(student) # 输出: {'name': 'John', 'age': 25}

最佳实践
  1. 字典推导式:用于创建新的字典。

     

    numbers = [1, 2, 3] squares = {x: x**2 for x in numbers} print(squares) # 输出: {1: 1, 2: 4, 3: 9}

  2. 使用 get() 访问值:避免键不存在时引发异常。

     

    student = {'name': 'John'} age = student.get('age', 'N/A') print(age) # 输出: N/A

  3. 合并字典:使用 update() 方法或字典解包操作。

     

    dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} dict1.update(dict2) print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4} # 或者在Python 3.9及以上版本中 dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} dict3 = dict1 | dict2 print(dict3) # 输出: {'a': 1, 'b': 3, 'c': 4}

  4. 使用 collections.defaultdict:处理不存在的键时更加简洁。

     

    from collections import defaultdict dd = defaultdict(int) dd['a'] += 1 print(dd) # 输出: defaultdict(<class 'int'>, {'a': 1})

  5. 有序字典:在需要保持插入顺序的情况下使用 collections.OrderedDict

    from collections import OrderedDict od = OrderedDict() od['a'] = 1 od['b'] = 2 print(od) # 输出: OrderedDict([('a', 1), ('b', 2)])

集合(Set)

常用方法
  1. add(x): 向集合添加元素 x

    fruits = {'apple', 'banana'} fruits.add('cherry') print(fruits) # 输出: {'apple', 'banana', 'cherry'}

  2. remove(x): 从集合中移除元素 x。如果元素不存在,则抛出 KeyError

    fruits = {'apple', 'banana'} fruits.remove('banana') print(fruits) # 输出: {'apple'}

  3. discard(x): 从集合中移除元素 x。如果元素不存在,不会抛出错误。

    fruits = {'apple', 'banana'} fruits.discard('banana') print(fruits) # 输出: {'apple'}

  4. pop(): 随机移除并返回集合中的一个元素。如果集合为空,抛出 KeyError

    fruits = {'apple', 'banana', 'cherry'} fruit = fruits.pop() print(fruit) # 可能输出: 'apple'

  5. clear(): 移除集合中的所有元素。

    fruits = {'apple', 'banana', 'cherry'} fruits.clear() print(fruits) # 输出: set()

  6. union(*others): 返回包含集合和所有 others 中的所有元素的新集合。

    set1 = {'apple', 'banana'} set2 = {'cherry', 'date'} union_set = set1.union(set2) print(union_set) # 输出: {'apple', 'banana', 'cherry', 'date'}

  7. intersection(*others): 返回包含集合和所有 others 中共同元素的新集合。

    set1 = {'apple', 'banana', 'cherry'} set2 = {'banana', 'date'} intersect_set = set1.intersection(set2) print(intersect_set) # 输出: {'banana'}

  8. difference(*others): 返回包含在集合中但不在 others 中的元素的新集合。

    set1 = {'apple', 'banana', 'cherry'} set2 = {'banana', 'date'} diff_set = set1.difference(set2) print(diff_set) # 输出: {'apple', 'cherry'}

  9. symmetric_difference(other): 返回包含在集合或 other 中但不在两者中的元素的新集合。

    set1 = {'apple', 'banana', 'cherry'} set2 = {'banana', 'date'} sym_diff_set = set1.symmetric_difference(set2) print(sym_diff_set) # 输出: {'apple', 'cherry', 'date'}

最佳实践
  1. 集合推导式:用于创建新的集合。

    numbers = [1, 2, 3, 4, 5] evens = {x for x in numbers if x % 2 == 0} print(evens) # 输出: {2, 4}

  2. 快速查找:使用集合的查找操作,具有 O(1) 时间复杂度。

    elements = {'apple', 'banana', 'cherry'} if 'banana' in elements: print("Found banana!")

  3. 避免重复:利用集合的特性来移除列表中的重复元素。

    numbers = [1, 2, 2, 3, 4, 4, 5] unique_numbers = list(set(numbers)) print(unique_numbers) # 输出: [1, 2, 3, 4, 5]

  4. 集合运算:充分利用集合的交集、并集和差集运算。

    set1 = {'apple', 'banana'} set2 = {'banana', 'cherry'} print(set1 & set2) # 交集: {'banana'} print(set1 | set2) # 并集: {'apple', 'banana', 'cherry'} print(set1 - set2) # 差集: {'apple'}

结论

理解和正确使用 Python 中的列表、元组、字典和集合是编写高效、可维护代码的基础。每种数据结构都有其独特的方法和最佳实践,合理选择和运用这些数据结构,能够极大地提升代码的性能和可读性。通过掌握这些数据结构的特点和用法,可以更灵活地应对各种编程挑战,编写出更加简洁、高效的代码。

猜你喜欢

转载自blog.csdn.net/weixin_55100524/article/details/139025442