python学习(1) - 基础数据结构
python学习(1) - 基础数据结构
category: 编程世界
date: 2023/04/14
status: Published
summary: 本文是 python学习记录(1) ,讲解了python的基础语法,基础数据结构包括列表,元组,集合,字典等数据结构;包括列表推导式,集合推导式与字典推导式,还包括常用的循环语句的书写方式。
tags: Python
type: Post
列表
列表是最简单的数据类型,相当于数组。
- 列表的基础操作函数
- 列表模拟栈
- 队列
- 列表推导式
-
以下是列表的常见操作:
l = [1, 2, 3, 4, 5] # 往末尾添加一个元素 l.append(6) l[len(l):] = [7] l2 = [0] # 所有元素添加到另一个列表中 l2.extend(l) l2[len(l2):] = l # 插入一个元素,插入到第一个参数的位置处 l.insert(0, 99) l.insert(len(l), 999) # 相当于在末尾插入一个元素 # 移除第一个指定的元素 l.remove(99) # 没有的话会返回一个错误 # 删除指定位置的元素,并且这个元素可以被返回 i = l.pop() # 删除尾元素,并且弹出这个值 # 清除所有的元素 l.clear() l = [1, 2, 5, 5, 5] # 返回第一个值为val的索引 i = l.index(5) # 返回val值出现的次数 cnt = l.count(5) # 就地排序列表 l.sort() # 就地翻转列表 l.reverse() # 返回列表的一个浅拷贝,相当于 r = l[:] r = l.copy() print(l) print('--------------------------'*2) """ 堆栈的模拟 """ l = [1, 2, 3] # 入栈 l.append(4) l.append(5) # 出栈 l.pop() l.pop() print(l) """ 队列的模拟 """ # 双端队列 from collections import deque queue = deque(["a", "b", "c"]) queue.append("d") queue.append("e") queue.popleft() queue.popleft() print(queue) """ 列表推导式 """ # 普通的方法:从序列创建列表 seq = [] for i in range(10): seq.append(i ** 2) print(seq) seq.clear() # 列表推导式(1) 推荐! seq = [x ** 2 for x in range(10)] print(seq) seq.clear() # (2) seq = list(map(lambda x: x ** 2, range(10))) print(seq) # 双重循环输出不重复的组合 print([(x, y) for x in [1, 2, 3] for y in [1, 2, 3] if x != y]) l = [-2, -1, 0, 1, 2] l1 = [x ** 2 for x in l] l2 = [abs(x) for x in l] l3 = [x for x in l if x >= 0] # print(l1) # print(l2) # print(l3) l = [' wain ', ' agda ', 'Edward '] # strip方法可以删除字符串头尾的空格 print([str.strip() for str in l]) ll = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 二维列表转换为一维列表 print([x for item in ll for x in item]) from math import pi # round保留小数 print([str(round(pi, i)) for i in range(1, 10)]) # 二维矩阵的转置 3X4 -> 4X3 l = [ [1,2,3,4], [4,5,6,7], [6,7,8,9] ] print([[row[i] for row in l] for i in range(len(l[0]))]) # zip表示“压缩” 将多个对象中对应的元素打包成一个个元组,然后使用list转换为列表 # zip(*)表示“解压” 还原为多个对象的形式 print("-----------------------------------"*2) l_zip = list(zip(*l)) print(l_zip) # 解压,还原为三个对象列表 l1, l2, l3 = zip(*l_zip) print(l1) print(l2) print(l3) print('---------------------------'*2) """ del语句 """ l = [1,2,3,4,5,6,7,8,9] print(l) # 列表的切片删除 左闭右开 del l[1:5] print(l) # 使用del来清空列表 del l[:] print(l) # 删除整个变量 del l
元组和序列
元组是python的一种标准序列类型。
一个元组由数个 逗号
与 值
组成:
t = 123,456,"woaini"
print(t)
u = t, (1,2,3,"66666")
print(u)
--------
(123, 456, 'woaini')
((123, 456, 'woaini'), (1, 2, 3, '66666'))
元组始终携带括号
元组是不可变的,因此不能给一个元组的某一个元素赋值。
元组和列表的区别:
- 元组是不可变的,并且元组的一个嵌套括号内可以包含多种不同类型的值,可以通过索引访问。
- 列表是可变的,并且只包含同一种类型的值,可以通过迭代访问。
注意:
创建一个空元组? 直接输入一个括号即可。
创建一个只含元素的元组? 需要输入 元素,
序列的拆封:
x, y = u
-------
(123, 456, 'woaini')
(1, 2, 3, '66666')
集合
创建集合的方式:
- 大括号
{}
- 函数
set()
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket2 = set('aaabbbccdef')
print(basket)
print(basket2)
if 'apple' in basket:
print('yes!')
------------
{'orange', 'pear', 'banana', 'apple'}
{'b', 'd', 'f', 'c', 'a', 'e'}
yes!
注意到:
- 集合中不包含重复的元素
- 如果使用
set()
创建集合,那么创建的是元素字符。 - 可以判断某元素是否在集合中。
集合推导式语法:
print({x for x in 'abcdefg' if x not in 'abcd'})
-----------
{'f', 'e', 'g'}
字典
字典由 关键字
和 值
组成。
由于关键字需要是索引,因此关键字必须是 不可变类型。通常为字符串或者数值,不能用列表做关键字。
字典的创建形式: {关键字: 值}
中间使用:分割
# 创建字典
dic = {'k1':123, 'k2':234, 'k3':456}
print(dic)
# 修改字典值
dic['k2'] = 999
print(dic)
# 删除字典键值对
del dic['k2']
print(dic)
-----------
{'k1': 123, 'k2': 234, 'k3': 456}
{'k1': 123, 'k2': 999, 'k3': 456}
{'k1': 123, 'k3': 456}
字典的关键字可以组成列表:
list
形成列表, sorted
对列表排序
# 返回所有关键字组成的列表
print(list(dic.keys()))
print(sorted(list(dic.keys())))
for key in dic:
print(dic[key], end=' ')
--------
['k1', 'k3', 'k2']
['k1', 'k2', 'k3']
123 456 666
使用 dict
直接创建字典:
dict中形成字典的大括号既可以使用 {}
也可以使用 []
,但是键值对必须是 ()
dic = dict({('sape', 4139), ('guido', 4127), ('jack', 4098)})
使用字典推导式创建字典:
dic = {x:x**2 for x in range(10)}
dict
创建关键字都是字符串类型的字典:
dic = dict(a=123,b=456,d=789)
循环技巧
在字典中,使用 items()
函数来遍历键值对:
for (k,v) in dic.items():
print(k,v)
--------------
a 123
b 456
d 789
在列表中,使用 enumerate
获得索引值和数值:
l = [1,2,3,4,5]
# 获取索引和值
for i,v in enumerate(l):
print(i,v)
----------
0 1
1 2
2 3
3 4
4 5
使用 zip
打包需要同时循环的列表:
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q,a in zip(questions,answers):
print("What is your {0}: {1}".format(q,a))
--------------
What is your name: lancelot
What is your quest: the holy grail
What is your favorite color: blue
reversed
逆向打印:
for num in reversed(range(1,10)):
print(num,end=' ')
去重
后 排序
输出:首先转换为集合,然后再sorted:
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for str in sorted(set(basket)):
print(str,end=' ')
------------
apple banana orange pear
本文来自博客园,作者:hugeYlh,转载请注明原文链接:https://www.cnblogs.com/helloylh/p/17320763.html