【Python】List(列表)和 Tuple(元组)
列表
一.创建
两种方法都行,一个List里面可以存储不同的类型:
alist1=[]
alist2=list()
二.切片操作
通过切片可以取出一组连续的元素,相当于取出子序列。
常规写法,表示从下标0遍历到下标2位置(左闭右开):
alist1=[1,2,3,4,5,6]
print(alist1[0:3])
忽略前后边界:
alist1=[1,2,3,4,5,6]
# 从头遍历到最后
print(alist1[0:])
print(alist1[:6])
print(alist1[:])
规定自增大小:
alist1=[1,2,3,4,5,6]
# 从头遍历每次下标+2
print(alist1[::2])
# 从尾遍历每次下标-2
print(alist1[::-2])
应用例子:字符串反转
str(x)[::-1]
三.相关方法
| append(obj) | 在列表末尾添加新的对象 |
| count(obj) | 统计某个元素在列表中出现的次数 |
| entend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
| index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
| insert(index,obj) | 将对象插入列表 |
| pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
| remove(obj) | 移除列表中某个值的第一个匹配项 |
| reverse() | 反向列表中元素 |
| sort() | 对原列表进行排序 |
四.列表推导式
为什么要使用列表推导式?因为快+简洁。
语法:
[结果表达式 for 变量 in 可迭代对象 if 条件]
nums = [1,2,3,4,5,6,7,8,9,10]
new_nums = [i*2 for i in nums]
print(new_nums)
使用列表推导式当然也可以遍历双层嵌套循环:
[结果表达式 for 外层变量 in 外层可迭代对象 for 内层变量 in 内层可迭代对象]
使用这个方法可以扁平化代码,下面给出使用双循环和使用列表推导式的例子:
matrix = [[1,2,3],[4,5,6],[7,8,9]]
# 列表推导式
vector=[element for row in matrix for element in row]
# 双层循环
vector=[]
for row in matrix:
for element in row:
vector.append(element)
三层,四层,n层,都是一样的写法,遵循从外到内,照葫芦画瓢即可。
五.Pythonic技巧
1.使用 * 运算符操作剩余序列
下面的两种写法没有区别
mylist = ['a','b','c','d','e']
(el1,el2,remaining) = mylist[0], mylist[1], mylist[2:]
(el1,el2,*remaining) = mylist
(el1,middle,eln) = mylist[0], mylist[1:-1], mylist[-1]
(el1,*middle,eln) = mylist
(el1, elminus1,eln) = mylist[:-2],mylist[-2], mylist[-1]
(*el1, elminus1,eln) = mylist
2.使用 array.array 获取基本类型数组
array.array 是 array 模块提供的高效基本类型数组,专门用于存储单一类型的基本数据(如整数、浮点数、字符),相比普通列表(list),它的内存占用更小、访问速度更快(因无需存储元素类型引用,直接存储原始二进制数据)。
import array
myarr = array.array('f',(1.0, 2.0, 3.0, 4.0, 5.0))
myarr[1] = 23.23
del myarr[1]
myarr.append(4.1)
元组
一.介绍
元组与列表类似,但是元组中的元素是不可变的。元组是一种静态数组,不支持动态扩展,其存储方式相较于列表更加紧凑,因此在同等条件下占用的内存更少。
创建时使用 ( ) 括起来,不用和列表弄混(列表使用 [ ] ):
tup = (1,2,3,4,5)
可以在以下情况下使用元组:
1)在函数中作为参数使用;
2)函数返回值包含多个项的时候使用;
3)遍历字典的键值对的时候使用;
4)作为字符串格式占位符使用。
二.Pythonic技巧
1.使用namedtuple编写更清晰的元组
namedtuple 用于创建带字段名的元组子类,不仅可以使用索引来访问元素,还可以使用字段名来访问元素。这样使用,比元组更可读,比字典更高效。
StudentScore = namedtuple("StudentScore",
["name", "math", "english", "chinese"])
scores = [
StudentScore("小明", 95, 88, 92),
StudentScore("小红", 90, 93, 89),
StudentScore("小刚", 85, 87, 94)
]
for s in scores:
total = s.math + s.english + s.chinese
print(f"{s.name} 总分:{total},平均分:{total/3:.1f}")
2.使用元组解包数据
使用 * 进行解包
group1 = ('a','b')
group2 = ('c','d')
new_group = (*group1, *group2, 'e', 'f')
print(new_group)
# Output: ('a', 'b', 'c', 'd', 'e', 'f')
3.占位符_
定义一个元组:
user = ("KaKa",24,"China","Beijing")
如果说我们只想取前面的两个数据,可以使用占位符_来占后面的位置:
(name,age,_,_) = user
如果说后面的字段比较多,可以是*_直接表示所有后面的位置:
(name,age,*_) = user
4.多值返回
对于Java来说,方法每次只能返回一个值,如果想要返回多个类型不同的值,只能封装成一个新的对象。而Python可以使用元组进行多值返回。
def get_data_info(data):
average = float(sum(data)) / len(data)
sum_value = sum(data)
max_value = max(data)
min_value = min(data)
return (average, sum_value, max_value, min_value)
list_of_data = [1,2,3,4,5]
print(get_data_info(list_of_data))更多推荐

所有评论(0)