day09-列表

1、作用:按位置存放多个值
2、定义
l=[1,1.2,'a'] # l=list([1,1.2,'a'])
print(type(l))

<class 'list'>
3、类型转换: 但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表
res=list('hello')
print(res)

['h', 'e', 'l', 'l', 'o']
res=list({'k1':111,'k2':222,'k3':3333})
print(res)

['k1', 'k2', 'k3']

4、内置方法
优先掌握的操作:
1、按索引存取值(正向存取+反向存取):即可以取也可以改

l=[111,'egon','hello']
# 正向取
print(l[0])

111
# 反向取
print(l[-1])

hello
# 可以取也可以改:索引存在则修改对应的值
l[0]=222
print(l)

[222, 'egon', 'hello']
# 无论是取值操作还是赋值操作:索引不存在则报错
l[3]=333

IndexError: list assignment index out of range

2、切片(顾头不顾尾,步长)

l = [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
print(l[0:3])   # 取出前三个
print(l[0:5:2]) # 0 2 4  取出前五个,间隔2个一取

# [111, 'egon', 'hello']
# [111, 'hello', 'b']

print(l[0:len(l)])
print(l[:])      # 这两种方式都是从头取到尾,不写默认就是从头到尾
new_l=l[:] # 切片等同于拷贝行为,而且相当于浅copy
print(id(l))
print(id(new_l))       # 这两名证明,是浅拷贝,是新内存地址

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1, 2, 3]]
# 1827082637376
# 1827083322752

l[-1][0]=1111111     # 给最一个的第一个元素赋值
print(l)             # 打印验证,已经赋值成功
print(new_l)         # 引用的也跟着改变了
print(l[::-1])       # 反向打印

# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111111, 2, 3]]
# [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111111, 2, 3]]
# [[1111111, 2, 3], 'd', 'c', 'b', 'a', 'hello', 'egon', 111]
msg1='hello:egon:<>:18[]==123'
msg2=msg1[:]
print(msg1,id(msg1))
print(msg2,id(msg2))     # 验证一下什么都不写默认从头到尾取

# hello:egon:<>:18[]==123 2295708326128
# hello:egon:<>:18[]==123 2295708326128

3、长度

print(len([1, 2, 3]))
3

4、成员运算in和not in

print('aaa' in ['aaa', 1, 2])
print(1 in ['aaa', 1, 2])

True
True

5、往列表中添加值

5.1 追加

l=[111,'egon','hello']
l.append(3333)
l.append(4444)
print(l)     # 在最后面追加
# [111, 'egon', 'hello', 3333, 4444]

5.2、插入值

l=[111,'egon','hello']
l.insert(0,'alex')   # 指定索引位置插入,余下的往后移动
print(l)

['alex', 111, 'egon', 'hello']

5.3、extend添加值

new_l=[1,2,3]
l=[111,'egon','hello']
# l.append(new_l)
print(l)       # 基础办法实现

# [111, 'egon', 'hello', [1, 2, 3]]

# 代码实现
for item in new_l:
    l.append(item)
print(l)

# [111, 'egon', 'hello', 1, 2, 3]

# extend实现了上述代码    extend就是用来实现把列表这种拆开,再分别追加进行的功能的新方法
l.extend(new_l)
l.extend('abc')
print(l)

# [111, 'egon', 'hello', 1, 2, 3, 1, 2, 3, 'a', 'b', 'c']

7、删除
方式一:通用的删除方法,只是单纯的删除、没有返回值

l = [111, 'egon', 'hello']
del l[1]
# x = del l[1] # 抛出异常,不支持赋值语法  SyntaxError: invalid syntax
print(l)

[111, 'hello']

方式二:l.pop()根据索引删除,会返回删除的值

l = [111, 'egon', 'hello']
l.pop() # 不指定索引默认删除最后一个
l.pop()
print(l)

[111]
l = [1,2,3]
res=l.pop(1)   #pop有返回值,就是删除掉的内容
print(l)
print(res)

[1, 3]
2

方式三:l.remove()根据元素删除,返回None

l = [111, 'egon', [1,2,3],'hello']
l.remove([1,2,3])
print(l)
res=l.remove('egon')
print(res) # None

[111, 'egon', 'hello']
None

8、循环

l=[1,'aaa','bbb']
for x in l:
l.pop(1)
print(x)



9、需要掌握操作:

l = [1, 'aaa', 'bbb','aaa','aaa']
# 1、l.count()  统计查找到的次数
print(l.count('aaa'))
# 3

# 2、l.index()
print(l.index('aaa'))
# 1
# print(l.index('aaaaaaaaa')) # 找不到报错

# 3、l.clear()
l.clear()   # 清楚内容
print(l)
# []

# 4、l.reverse():不是排序,就是将列表倒过来
l = [1, 'egon','alex','lxx']
l.reverse()
print(l)
['lxx', 'alex', 'egon', 1]

# 5、l.sort(): 列表内元素必须是同种类型才可以排序
l=[11,-3,9,2,3.1]
l.sort() # 默认从小到大排,称之为升序
print(l)
l.sort(reverse=True) # 如果不写的话默认是False,也就是升序排列,改为True,则从大到小排,设置为降序
# print(l)
# [-3, 2, 3.1, 9, 11]
# [11, 9, 3.1, 2, -3]
l=[11,'a',12]   # 不是同一种类型,不能排列
l.sort()
# TypeError: '<' not supported between instances of 'str' and 'int'
l=['c','e','a']   # 同一类,字符串也可比较
l.sort()
print(l)
['a', 'c', 'e']

了解:字符串可以比大小,按照对应的位置的字符依次pk
字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的

print('a'>'b')
print('abz'>'abcdefg')

False
True

了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型

l1=[1,'abc','zaa']
l2=[1,'abc','zb']

print(l1 < l2)
True

补充知识点

# 1、队列:FIFO,先进先出
l=[]
# 入队操作
l.append('first')
l.append('second')
l.append('third')

print(l)
# 出队操作
print(l.pop(0))
print(l.pop(0))
print(l.pop(0))

['first', 'second', 'third']
first
second
third
# 2、堆栈:LIFO,后进先出
l=[]
# 入栈操作
l.append('first')
l.append('second')
l.append('third')

print(l)
# 出队操作
print(l.pop())
print(l.pop())
print(l.pop())

['first', 'second', 'third']
third
second
first
原文地址:https://www.cnblogs.com/xiao-zang/p/12462959.html