python学习(1) - 基础数据结构(列表元组集合字典)

文章首发于:欢迎大佬们前来逛逛

文章目录

  • 列表
  • 元组和序列
  • 集合
  • 字典
  • 循环技巧

列表

列表是最简单的数据类型,相当于数组。

  1. 列表的基础操作函数
  2. 列表模拟栈
  3. 队列
  4. 列表推导式
  • 以下是列表的常见操作

    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'))

元组始终携带括号

元组是不可变的,因此不能给一个元组的某一个元素赋值。

元组和列表的区别:

  1. 元组是不可变的,并且元组的一个嵌套括号内可以包含多种不同类型的值,可以通过索引访问
  2. 列表是可变的,并且只包含同一种类型的值,可以通过迭代访问

注意:

创建一个空元组? 直接输入一个括号即可。

创建一个只含元素的元组? 需要输入 元素,


序列的拆封:

x, y = u
-------
(123, 456, 'woaini')
(1, 2, 3, '66666')

集合

创建集合的方式:

  1. 大括号 {}
  2. 函数 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!

注意到:

  1. 集合中不包含重复的元素
  2. 如果使用 set() 创建集合,那么创建的是元素字符。
  3. 可以判断某元素是否在集合中。

集合推导式语法:

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

你可能感兴趣的:(python,python,数据结构,学习)