Python数据结构之合集

1. Python数据结构

Python作为一种高级编程语言,天生就具备了良好的数据结构支持,它提供了很多内置的数据结构,如列表、元组、字典、集合、队列、堆等等。此外,Python还提供了很多标准库和第三方库,如NumPy、Pandas、Scrapy等等,它们也提供了各种高级数据结构和算法。

1.1 列表(List)

Python中最常用的数据结构就是列表(List)。列表是一种有序的序列,每个序列内可以包含不同类型的元素,包括数字、字符串和其他对象。列表的元素可以根据下标索引访问,同时还可以通过切片来截取列表中的一部分。可以像下面这样新建一个列表:

l = [1, 'a', True, [2,3]]

可以看到,列表中可以包含不同类型的对象。下面是一些常用的列表操作方法:

添加元素: 使用append方法向列表的末尾添加元素。

插入元素: 使用insert方法在列表的指定位置插入元素。

删除元素: 使用remove方法删除指定元素,使用del方法删除指定下标的元素。

得到列表长度: 使用len方法得到列表中元素的个数。

得到元素下标: 使用index方法得到指定元素的下标。

反转列表: 使用reverse方法将列表反转。

下面是一些简单的例子:

l = [1, 2, 3]

l.append(4)

l.insert(3, 5)

l.remove(2)

print("Length of list: ", len(l))

print("Index of 3: ", l.index(3))

l.reverse()

print("Reversed list: ", l)

1.2 元组(Tuple)

元组(Tuple)跟列表类似,也是一个有序序列,只不过它的元素不可改变,而且用小括号()而不是中括号[]来表示。元组一旦建立就不能修改,这种特性使得元组更加安全、更加适合用于存储一些重要的数据,比如一个人的生日或身份证号码等。

下面是一个简单的元组例子:

t = (1, 'a', True, [2,3])

print("Tuple t: ", t)

print("t[0]: ", t[0])

t[3][0] = 5

print("Modified tuple: ", t)

可以看到,元组也可以包含不同类型的元素,但它是不可变的,当元组中包含列表等可变元素时,这些元素可以被改变,但是元组本身不能被改变。

1.3 字典(Dictionary)

字典(Dictionary)是Python中另一种常见的内置数据结构之一,它也是一个有序的序列,但是每个元素都是由一个key和一个value组成的键值对(key-value pair),这意味着字典中的元素是没有顺序的,而是通过key来进行访问的。

下面是一个简单的字典例子:

d = {'name': 'John', 'age': 20, 'gender': 'male'}

print("Dictionary d: ", d)

print("d['name']: ", d['name'])

d['age'] = 21

d['address'] = 'New York'

print("Modified dictionary: ", d)

可以看到,我们可以通过key来访问字典中的某个元素,同时还可以通过key来新增、修改和删除元素。

1.4 集合(Set)

集合(Set)是Python中的一种无序的数据结构,它由一组不重复的元素组成。集合的元素可以是任何可哈希的数据类型,包括数字、字符串、元组等,但是集合本身是不可哈希的,这也是为什么集合不能包含其他集合这样的可变元素的原因。

下面是一个简单的集合例子:

s = {1, 2, 3, 'a', 'b'}

print("Set s: ", s)

if 'a' in s:

print("'a' is in set s")

s.add(4)

s.remove(2)

print("Modified set: ", s)

可以看到,集合能够去除重复元素,同时也支持新增、删除、判断元素是否在集合中等基本操作。

2. Python数据结构的应用

Python数据结构在实际应用中有很多用途,比如用来存储和处理大量数据,实现算法和数据结构的相关问题,以及构建各种实际系统等。

2.1 数据处理(Pandas)

Pandas是Python中最流行的数据处理库之一,它提供了Series、DataFrame等多种数据结构,可以方便地进行数据读取、清洗、分析和可视化。

下面是一个简单的Pandas例子:

import pandas as pd

data = {'name': ['John', 'Mary', 'Mike'], 'score': [90, 80, 70]}

df = pd.DataFrame(data)

print("Data frame:\n", df)

print("Mean score: ", df['score'].mean())

可以看到,我们通过Pandas读取数据并构建了一个DataFrame,接着计算了成绩的平均值。

2.2 图像处理(NumPy)

NumPy是Python中用于数值计算的基础库之一,它提供了多维数组(ndarray)及其相关操作工具,可以帮助我们处理和分析大量的数值数据,同时也是很多其他库的基础。

下面是一个使用NumPy进行图像处理的例子:

import numpy as np

from PIL import Image

# Load image and turn it into a NumPy array

im = Image.open('image.jpg')

arr = np.array(im)

# Flip the image vertically

arr = np.flipud(arr)

# Save the modified image

im = Image.fromarray(arr)

im.save('modified_image.jpg')

可以看到,我们先用Pillow库读取了一张图片,并用NumPy将其转换为数组,然后对数组进行了操作后再转换为图像并保存。

2.3 网络爬虫和数据抓取(Scrapy)

Scrapy是Python中使用最广泛的爬虫框架之一,它提供了强大的网页抓取和处理能力,能够为我们快速地爬取和处理大量的数据。

下面是一个使用Scrapy进行网页爬取的例子:

import scrapy

class QuotesSpider(scrapy.Spider):

name = "quotes"

start_urls = ['http://quotes.toscrape.com/page/1/',]

def parse(self, response):

for quote in response.css('div.quote'):

yield {

'text': quote.css('span.text::text').get(),

'author': quote.css('span small::text').get(),

'tags': quote.css('div.tags a.tag::text').getall(),

}

next_page = response.css('li.next a::attr(href)').get()

if next_page is not None:

yield response.follow(next_page, self.parse)

可以看到,我们定义了一个QuotesSpider爬虫,爬取了一个名言网站上的数据,并将其以JSON格式输出。

结语

Python提供了丰富的数据结构和库,这些数据结构和库可以帮助我们快速地处理和分析大量的数据,同时也能够为我们快速地构建各种实际系统提供支持。因此,学习Python的数据结构和库的使用是非常重要的。

后端开发标签