Python基础语法-内置数据结构之列表
2017-12-29 07:52
846 查看
列表的一些特点:
列表是最常用的线性数据结构
list是一系列元素的有序组合
list是可变的
列表的操作,
增:append、extend、insert
删:clear、pop、remove
改:reverse、sort
查:count、index
其他:copy
index可以有其他两个参数,start,stop可以为负数,但是总是从左往右查找。
index方法根据值返回第一个索引。
列表的count方法用于返回列表里出现元素的个数,如果没有就返回0。
count方法的原型:
index和count的时间复杂度是O(n)线性复杂度(效率与数据规模成线性相关)。
由于列是可变的数据结构,因此可以对列表的元素可以进行修改。修改列表的元素直接使用下标操作取出元素并对其赋值即可。
增加列表元素,使用修改列表元素的方法不能增加列表元素。可以使用append方法来增加列表的元素,
lst = [1, 3, 5, 7]
运行结果为:
append与extend的对比:
append原地修改列表,返回None
extend原地修改,返回None
append操作单个元素
extend操作可迭代对象
pop与remove的对比:
pop是弹出索引对应的值
remove是删除最左边的第一次出现的值
pop针对的是索引
remove针对的是值
pop不传递index参数时,其时间复杂度为O(1)
pop传递index参数时,其时间复杂度为O(n)
insert可以在指定的位置处插入元素。当insert时,索引超出范围时:
索引是负数,会在第0个元素前插入元素
索引是正数,会在最后一个元素后插入元素
运行结果为:
insert操作的时间复杂度是O(n),append操作的时间复杂度是O(1)。
列表有copy的方法,
运行结果为:
赋值操作传递的是引用,也叫浅拷贝。
copy方法的原型:
清除列表,
求list的长度,
列表反转,
列表排序,原地修改,返回None。默认是顺序排列,
去除列表中重复元素,
来看几个跟列表应用的例子,
运行结果为:
列表是最常用的线性数据结构
list是一系列元素的有序组合
list是可变的
列表的操作,
增:append、extend、insert
删:clear、pop、remove
改:reverse、sort
查:count、index
其他:copy
>>> [a for a in dir(list) if not a.startswith('__')] ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
定义与初始化列表
lst = list() # 使用list函数定义空列表 lst = [] # 使用中括号定义空列表 a = [1, 2, 3] # 使用中括号定义带初始值的列表 lst = list(range(1, 10)) # 使用list函数把可迭代对象转化为列表 a_ref = aa[2] = 100
列表的访问
可以通过下标访问列表中的元素,下标从0开始。当下标超出范围时,会抛出IndexError异常。下标可以是负数,负数下标从右开始,与正数下标刚好相反。负数下标从-1开始。不管是正数的下标还是负数的下标,只要超出范围,就会抛出异常。lst = [1, 2, 3] print(lst[0]) print(lst[2]) # print(lst[3])
列表常用操作
我们可以通过列表的下标(或索引)找到相应的元素,也可以通过列表元素找到其相应的索引。列表提供了index方法可以实现此需求,接下来我们就看一下如何使用列表的index方法。lst = [1, 2, 3, 2, 5]help(lst.index) : Help on built-in function index: : : index(...) method of builtins.list instance : L.index(value, [start, [stop]]) -> integer -- return first index of value. : Raises ValueError if the value is not present. :
index可以有其他两个参数,start,stop可以为负数,但是总是从左往右查找。
index方法根据值返回第一个索引。
a_copy = a[:] a.append(300) # 在列表的末尾增加一个元素 a.insert(1, 50) # 在指定位置增加一个元素,如果索引超出范围,如果是正索 # 引,等效于append,如果索引为负数,等效于insert(0, object)。 a.pop() # 默认从列表最后移除一个元素,可以指定索引;索引不能超出范围 a.sort() # 排序方法a.reverse() # 反转方法 a.remove(value) # 移除列表中第一次出现的value,如果value不存在,则抛出ValueError异常 del a[1]
列表的count方法用于返回列表里出现元素的个数,如果没有就返回0。
lst = [1, 2, 3, 2, 3, 5] print(lst.count(2)) print(lst.count(5)) # there was no element 0 print(lst.count(0))
count方法的原型:
def count(lst, value): c = 0 for x in lst: if x == value: c += 1 return c
index和count的时间复杂度是O(n)线性复杂度(效率与数据规模成线性相关)。
由于列是可变的数据结构,因此可以对列表的元素可以进行修改。修改列表的元素直接使用下标操作取出元素并对其赋值即可。
lst = [1, 2, 3, 2, 4, 3, 5] print(lst[2]) lst[2] = 5 print(lst[2]) # 对超出范围的索引修改元素,会抛出IndexError异常 # lst[7] = 7
增加列表元素,使用修改列表元素的方法不能增加列表元素。可以使用append方法来增加列表的元素,
lst = [1, 3, 5, 7]
lst.append(9) print(lst) lst.extend([1, 2, 3]) print(lst) lst.extend(range(3)) print(lst) # remove # 根据值来删除 # 从左到右删除第一次出现的元素 lst.remove(1) print(lst) # 删除一个不存在的值时,会抛出ValueError异常 # lst.remove(10)# pop # 默认返回并删除最后一个元素 lst.pop() print(lst) # pop可以有参数 # 返回并删除索引所在位置的元素 lst.pop(1) print(lst) # 当pop不存在的索引时,抛出IndexError异常 # lst.pop(100)
运行结果为:
: [1, 3, 5, 7, 9] : [1, 3, 5, 7, 9, 1, 2, 3] : [1, 3, 5, 7, 9, 1, 2, 3, 0, 1, 2] : [3, 5, 7, 9, 1, 2, 3, 0, 1, 2] : [3, 5, 7, 9, 1, 2, 3, 0, 1] : [3, 7, 9, 1, 2, 3, 0, 1]
append与extend的对比:
append原地修改列表,返回None
extend原地修改,返回None
append操作单个元素
extend操作可迭代对象
pop与remove的对比:
pop是弹出索引对应的值
remove是删除最左边的第一次出现的值
pop针对的是索引
remove针对的是值
pop不传递index参数时,其时间复杂度为O(1)
pop传递index参数时,其时间复杂度为O(n)
insert可以在指定的位置处插入元素。当insert时,索引超出范围时:
索引是负数,会在第0个元素前插入元素
索引是正数,会在最后一个元素后插入元素
lst = [1, 3, 5, 7] lst.insert(2, 'm') print(lst) lst.insert(10, 'e') print(lst) lst.insert(-10, 'a') print(lst)
运行结果为:
: [1, 3, 'm', 5, 7] : [1, 3, 'm', 5, 7, 'e'] : ['a', 1, 3, 'm', 5, 7, 'e']
insert操作的时间复杂度是O(n),append操作的时间复杂度是O(1)。
列表有copy的方法,
lst1 = [1, 3, 2, 5, 7] lst2 = lst1 # 赋值操作,对可变对象是引用传递,对不可变对象是传值 print(lst2) lst2.remove(2) print(lst2) print(lst1) lst1 = [1, 3, 2, 5, 7] lst2 = lst1.copy() # 影子拷贝 lst2.remove(2) print(lst2) print(lst1)
运行结果为:
: [1, 3, 2, 5, 7] : [1, 3, 5, 7] : [1, 3, 5, 7] : [1, 3, 5, 7] : [1, 3, 2, 5, 7]
赋值操作传递的是引用,也叫浅拷贝。
copy方法的原型:
def copy(lst): tmp = [] for i in lst: tmp.append(i) return tmp
清除列表,
lst.clear() # 删除所有元素
求list的长度,
lst = [] print(len(lst)) lst = list(range(4)) print(len(lst))
列表反转,
列表排序,原地修改,返回None。默认是顺序排列,
lst.sort() lst.sort(reverse=True)
去除列表中重复元素,
L1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a'] L2 = [] [L2.append(i) for i in L1 if not i in L2] print(L2) : ['b', 'c', 'd', 'a']
iter = (x ** 2 for x in range(10) if x % 2 == 0) iter <generator object <genexpr> at 0x1056b42b0>>>> for el in iter: print(el) 0 4 16 36 64 ###>>> print [(x, y) for x in (1, 2, 3, 4) for y in (10, 15, 3, 22) if x * y > 25] [(2, 15), (2, 22), (3, 10), (3, 15), (3, 22), (4, 10), (4, 15), (4, 22)]
来看几个跟列表应用的例子,
# 求素数的列表使用法lst = []for n in range(2, 101): for x in lst: if n % x == 0: break else: lst.append(n) print(n)
一个例子
一个可以输出直方图的例子,代码如下:(venv) [lavenliu@VM_171_247_centos mysite]$ cat hist.py # 从一个列表中创建一个直方图 values = [] # 首先创建一个空列表# 我们输入10个整数 print("Enter 10 integers:") for i in range(10): newValue = int(input("Enter integer %d: " % (i+1))) values += [newValue] # 创建直方图 print("\nCreating a histogram from values:") print("%s %10s %10s" % ("Element", "Value", "Histogram")) for i in range(len(values)): print("%7d %10d %s" % (i, values[i], "*" * values[i]))
运行结果为:
venv lavenliu@VM_171_247_centos mysite$ python hist.py Enter integers: Enter integer 1: 10 Enter integer 2: 8 Enter integer 3: 23 Enter integer 4: 15 Enter integer 5: 2 Enter integer 6: 5 Enter integer 7: 7 Enter integer 8: 9 Enter integer 9: 6 Enter integer 10: 4 Creating a histogram from values: Element Value Histogram ********** ******** *********************** *************** ** ***** ******* ********* ****** ***
相关文章推荐
- python基础知识——内置数据结构(列表)
- Python语法基础(二):列表
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- Python基础语法学习----列表的访问,操作以及列表函数
- Poedu_Python_Lesson003_基础语法_列表、元组、判断、循环
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- 【Python】06、python内置数据结构之列表和元祖
- Python连载系列之Python语法基础3:Python中的字符串和数据结构
- Python入门基础语法之字符串、列表、元组
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- Python内置数据结构——列表list,元组tuple
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- python基础知识——内置数据结构(元组)
- week02_python内置数据结构__列表
- Python基础-基本语法,内置容器
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- 1.python语法基础-列表、数组、函数、元组和控制语句
- python 基础语法之列表的变换(取反\切片等)
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结