8.18 列表元组集合
列表是python中最常用的一种数据结构,列表是标量的一个集合,里面可以放多个标量。与列表类似的是元组,元组是一种不可以修改的“列表”,创建之后不能修改。还有集合,是一种去除重复元素的列表。 列表是一种有顺序的表,其中的列,代表一定序列。与列表类似的是数组这种数据类型。数组是用于储存多个相同类型数据的集合,而列表中可以包含不同数据类型。数组也可以通过索引来访问数组中具体的元素。但是因为数组在一创建时就需要明确数组的大小(开辟一块连续的空间),所以数组在程序中使用起来就具有局限性。 列表也可以嵌套列表,构成多维数据,但这种情况下一般都使用多维数组,在python中,有numpy包专门用于处理多维数组。
1 创建列表元组和集合
import os
# 通过[]直接生成
list1 = [1, 2, 3, 4, 5]
#print(list1)
#通过list()函数转换
list2 = list(['A', 'B', 'C', 'D'])
#将元组转换为列表
list3 = list(('A', 'B', 'C', 'D'))
#字符串切片
list4 = list('GGACACCATCAACAG')
print(list3)
list5 = "A:B:C:D:E:F".split(":")
print(list5)
# 字典转换为列表
list({'a':3, 'b':9, 'c':78})
#定义一个空列表,通过文件读入数据,存入列表
list6 = []
for i in open('test.fa','r'):
list6.append(i.strip())
print(list6)
# 二维列表
blist = [[1, 2, 3], [4, 5, 6]]
2 求和计算
# 求和计算
data = []
for line in open('neuron_data.txt'):
length = float(line.strip())
data.append(length)
n_items = len(data)
total = sum(data)
shortest = min(data)
longest = max(data)
data.sort()
output = open("results.txt","w")
output.write("number of dendritic lengths : %4i \n"%(n_items))
output.write("total dendritic length : %6.1f \n"%(total))
output.write("shortest dendritic length : %7.2f \n"%(shortest))
output.write("longest dendritic length : %7.2f \n"%(longest))
output.write("%37.2f\n%37.2f"%(data[-2], data[-3]))
output.close()
3 列表索引
列表是一个集合,如果想获取其中任意元素,可以通过列表索引的方法。列表是具有顺序的集合,可以通过位置索引来选择,在python中索引从0开始也就是索引5,其实是第六个元素,也可以一次给定一个范围,但是注意索引是不包含右边界。如果用负数索引,则代表从后往前。
图1 列表索引
alist = list(range(1,10))
# 列表第三个元素
alist[2]
# 列表第3到6个元素
alist[2:6]
# 列表第3到7个元素
alist[-7:-2]
# 按步长值索引
alist[1:8:2]
#索引多个值,可以使用一个for循环
new_list = [alist[i] for i in [3,6,8,3]]
print(new_list)
4 操作列表
与字符串数据类型一样,python的列表也有大量属性和方法。
# 查看列表属性与方法
>>> alist = list(range(1,10))
>>> print(dir(alist))
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
下面给出一些列表常见操作方法
# 创建列表
x = list(range(1, 10, 1))
print(x)
# 打印列表属性与方法
print(dir(x))
# 尾部添加单个元素
x.append(10)
#insert()指定插入单个元素
x.insert(0, 0)
# extend()尾部追加列表
x.extend([11, 12, 13])
# pop()删除并返回指定位置元素(默认结尾处)(也可用负数来逆序弹出)
print(x.pop())
print(x.pop(-2))
# remove()删除首个指定的值
x.remove(4)
print(x)
# del 删除指定位置元素
del x[2]
# clear()删除所有元素
x.clear()
x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
# 下标查指定位置元素
print(x[4])
# count()查指定元素出现次数
print(x.count(4))
# index()查指定元素首次出现索引
print(x.index(3))
x = [8, 5, 2, 3, 1, 7, 2, 8, 1, 4]
# sort()排序
x.sort()
# reverse()翻转
x.reverse()
#浅拷贝
x = [1, 2, 3, 4]
y = x
y.append(5)
#深拷贝
x = [1, 2, 3, 4]
y = x.copy()
y.pop()
5元组
元组(tuple)是一种特殊的列表,由小括号、逗号和数据对象构成的集合,各个项通过逗号隔开。 元组的特点是:
元组项可以是任何数据类型,也可以嵌套;
元组是一个位置有序的对象的集合;
元组是不可变的,不能在原处修改;
元组的各个项可以重复。
元组一旦创建就不能修改,这个可以用于月一些安全性较高的场合,防止被篡改。
# 通过小括号创建元组
tup = (1, 2, 3, 4)
print(tup)
# 通过tuple函数创建元组
tup = tuple([1, 2, 3, 4])
print(tup)
# 查看元组属性与方法
dir(tup)
由于元组不可修改的特性,所以能对元组操作的方法很少。
6 集合
集合是Python中的内置数据结构之一,集合(set)是由唯一的、不可变的对象构成的无序集合。 集合的特点是:
元素不允许重复;
集合的元素是无序的;
集合的元素是为不可变对象;
集合不支持索引或切片操作,也没有键可用于获取集合中的元素值;
集合是去重复的无序列表;
集合是没有value的字典;
# 通过set函数创建集合
set1 = set([1,2,3,4])
print(set1)
# 通过大括号创建集合
set2 = {1, 2, 3, 4, 1, 2}
print(set2)
# 字符串转换为集合
set3 = set('abcdabcd')
print(set3)
# 查看集合属性与方法
print(dir(set3))