CC-Python-数据类型之list,tuple

1,list,列表

列表使用中括号[]表示,内可盛放各种数据类型如  1(整形),'abc'(字符串)等等

Ⅰ.列表的增

1、append()

append是在列表最后面添加元素

lis = ['a', 'b', 'c', 'd', 'e']
lis.append('f')
print(lis)

['a', 'b', 'c', 'd', 'e', 'f']

2、insert()

在指定索引处插入新元素

insert(索引,新元素)

lis = ['a', 'b', 'c', 'd', 'e']
lis.insert(0,'A')
print(lis)

['A', 'a', 'b', 'c', 'd', 'e']

如果索引超出列表上界或下届,则在开头或结尾添加

lis = ['a', 'b', 'c', 'd', 'e']
lis.insert(8,'A')
print(lis)

['a', 'b', 'c', 'd', 'e', 'A']

3、extend()

将可迭代对象添加进列表里

extend(可迭代对象)

s1 = 'fgh'
lis = ['a', 'b', 'c', 'd', 'e']
lis.extend(s1)
print(lis)

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

 

列表之间可以通过'+'连接,单个列表可以通过'*'复制

lis = ['a', 'b', 'c', 'd', 'e']
lis2 = ['f', 'g', 'h']
lis3 = lis + lis2
print(lis3)

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
s1 = ['a']
s2 = s1 * 5
print(s2)

['a', 'a', 'a', 'a', 'a']

Ⅱ.列表的删

1、remove

remove按元素从左向右查找并删除找到的第一个元素

lis = ['a', 'b', 'c', 'c', 'b', 'a']
lis.remove('c')
print(lis)

['a', 'b', 'c', 'b', 'a']

如果remove的元素不在列表里,则会报错

lis = ['a', 'b', 'c', 'c', 'b', 'a']
lis.remove('x')
print(lis)

ValueError: list.remove(x): x not in list

2、pop

pop是按照索引弹出某个元素,默认为最后一个元素,又返回值,就是弹出的那个元素

lis = ['a', 'b', 'c', 'c', 'b', 'a']
s = lis.pop()
print(s)
print(lis)

a
['a', 'b', 'c', 'c', 'b']
lis = ['a', 'b', 'c', 'c', 'b', 'a']
s = lis.pop(2)
print(s)
print(lis)

c
['a', 'b', 'c', 'b', 'a']

3、clear

清空列表

lis = ['a', 'b', 'c', 'c', 'b', 'a']
lis.clear()
print(lis)

[]

4、del

del的第一个用法是所有数据类型都有的,例如 del list1,就是在内存中删除list1这个变量

lis = ['a', 'b', 'c', 'c', 'b', 'a']
del lis
print(lis)

NameError: name 'lis' is not defined

在操作列表时,del可以通过切片的方式来删除列表中某些元素

lis = ['a', 'b', 'c', 'c', 'b', 'a']
del lis[0:3]
print(lis)

['c', 'b', 'a']

Ⅲ.列表的改

1、通过索引修改

lis = ['a', 'b', 'c', 'c', 'b', 'a']
lis[0] = 'A'
print(lis)

['A', 'b', 'c', 'c', 'b', 'a']

2、迭代修改一个索引范围的元素

lis = ['a', 'b', 'c', 'c', 'b', 'a']
lis[0:3] = 'ABCDE'
print(lis)

['A', 'B', 'C', 'D', 'E', 'c', 'b', 'a']

Ⅳ.列表的查

1、通过索引查找一个元素

lis = ['a', 'b', 'c', 'c', 'b', 'a']
print(lis[2])

c

2、通过元素找索引  index

index(value,[start,[stop]])  可切片寻找

lis = ['a', 'b', 'c', 'c', 'b', 'a']
print(lis.index('a'))
print(lis.index('a',1)

0
5

找不到会报错

lis = ['a', 'b', 'c', 'c', 'b', 'a']
print(lis.index('d'))

ValueError: 'd' is not in list

Ⅴ.列表的其他操作

1、reverse

对列表进行反转,没有返回值

lis = ['a', 'b', 'c']
lis.reverse()
print(lis)

['c', 'b', 'a']

2、sort

sort(key=None,reverse=False)

对列表进行排序,就地修改,默认升序

reverse默认为False,当reverse为True时反转变为降序

通过key进行自定义排序方式

lis = ['a', 'g', 'e', 'c' , 's', 'f', 'b']
lis.sort()
print(lis)

['a', 'b', 'c', 'e', 'f', 'g', 's']
lis = ['a', 'g', 'e', 'c' , 's', 'f', 'b']
lis.sort(reverse=True)
print(lis)

['s', 'g', 'f', 'e', 'c', 'b', 'a']

3、count

计数,统计某个元素在列表中出现的次数

lis = ['a', 'b', 'c', 'c', 'b', 'a']
print(lis.count('a'))

2

4、join

使用前提:列表中的元素全是字符串类型

用法:  str.join(list)

lis = ['a', 'b', 'c', 'c', 'b', 'a']
print('_'.join(lis))

a_b_c_c_b_a

2,tuple,元组

由于元组不可修改,所以只有查一个用法

用法与列表的查一致

 

但值得注意的是,如果元素里嵌套一个可更改的类型如列表,虽然元组不可变,但是里面嵌套的列表是可以改变的

tu = ('a', 's', ['a','b','c'], 'f')
tu[2].append('d')
print(tu)

('a', 's', ['a', 'b', 'c', 'd'], 'f')

原因是:元组不可改指的是元组元素的内存地址不可以改变,例如,假如上述元组元素'a'在内存中的地址是123456,而元素列表的内存地址是654321,修改列表是修改了内存地址654321内的数据,而不是修改了这个元素指向的地址,但是要修改一个元素如令tu[0] = 'c',是将元组的第一个元素地址指向了新的地址(字符串'c'在内存中的地址假设111111),改变了原有指向123456,是错误的

 

posted @ 2019-04-06 16:40  褚褚丶  阅读(305)  评论(0编辑  收藏  举报