2. 基本数据结构-列表

一、列表定义

​ List(列表)是python中使用最频繁的数据类型。列表可以完成大多数的数据结构实现。列表中元素的类型可以不同。它支持数字/字符串/列表(嵌套)。列表是写在[]之间的,用逗号分隔开的元素列表,和字符串一样。列表同样可以被索引和切片,列表被切片后返回一个包含所需元素的新列表。而且列表是有序的(按照你保存的顺序),有索引,可切片方便取值。python可存放32/64位,列表是可变数据类型,不可hash。

二、列表切片

1. 示意图

2. 列表切片操作

list = [ 'abcd', 786 , 2.23, 'run', 70.2 ]

1. 切片切得是什么类型,切后的数据就是什么类型
    tinylist = [123, 'runoob']
    print (list)            # 输出完整列表    ['abcd', 786, 2.23, 'run', 70.2]
    print (list[0])         # 输出列表第一个元素    abcd
    print (list[1:3])       # 从第二个开始输出到第三个元素     [786, 2.23]
    print (list[2:])        # 输出从第三个元素开始的所有元素    [2.23, 'run', 70.2]
    print (tinylist * 2)    # 输出两次列表    [123, 'run', 123, 'run']
    print (list + tinylist) # 连接列表   ['abcd', 786, 2.23, 'run', 70.2, 123, 'run']
    print(list1[-5:]) # 从第一元素取至最后一个,-5就是第一个元素['abcd', 786, 2.23, 'run', 70.2]    
    print(list[-5::2]) #增加步长,隔一个取一个   ['abcd', 2.23, 70.2]
    print(list[-1::-2])# 倒着取值    [70.2, 2.23, 'abcd']
    print(list[-1: ])    [70.2]
   
2.li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    li[2:5] = [11, 22, 33, 44, 55]
    print(li)
    结果:[1, 2, 11, 22, 33, 44, 55, 6, 7, 8, 9]

三、列表操作

1. 添加

注意, list和str是不一样的. lst可以发生改变. 所以直接就在原来的对象上进行了操作

(1) append() - 尾部追加
lst = ["麻花藤", "林林俊杰", "周润发", "周芷若"]
print(lst)
lst.append("wusir")
print(lst)

lst = []
while True:    
    content = input("请输入你要录入的员工信息, 输入Q退出:")
    if content.upper() == 'Q':
            break    
    lst.append(content)
print(lst)

备注:
    append()是浅拷贝
    >>>alist = []
    >>> num = [2]
    >>> alist.append( num )
    >>> id( num ) == id( alist[0] )
    True
    如果使用 num[0]=3,改变 num 后,alist[0] 也随之改变。
    如不希望,需要使用 alist.append( copy.deepcopy( num ) )
(2) insert() - 插入
lst = ["麻花藤", "张德忠", "孔德福"]
lst.insert(1, "刘德华")    # 在1的位置插入刘德华. 原来的元素向后移动一位
print(lst)
(3) extend() - 列表扩展
用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

1. 语法
    list.extend(seq)
    - seq:元素列表,可以是列表/元组/集合/字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾

2. 案例
    list1 = ['Google', 'Runoob', 'Taobao']
    list2=list(range(5)) # 创建 0-4 的列表
    list1.extend(list2)  # 扩展列表
    print ("扩展后的列表:", list1)
    扩展后的列表: ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]

3. 其他案例
    # 语言列表
    language = ['French', 'English', 'German']
    # 元组
    language_tuple = ('Spanish', 'Portuguese')
    # 集合
    language_set = {'Chinese', 'Japanese'}

    # 添加元组元素到列表末尾
    language.extend(language_tuple)
    print('新列表: ', language)
    新列表:  ['French', 'English', 'German', 'Spanish', 'Portuguese']
    
    # 添加集合元素到列表末尾
    language.extend(language_set)
    print('新列表: ', language)
    新列表:  ['French', 'English', 'German', 'Spanish', 'Portuguese', 'Japanese', 'Chinese']

2. 删除

(1) pop()
用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值;list.pop([index=-1])

lst = ["麻花藤", "王剑林林", "李李嘉诚", "王富贵"]
print(lst)
# 默认删除最后一个
deleted = lst.pop()         
print("被删除的", deleted)
print(lst)
结果:
    ['麻花藤', '王剑林林', '李李嘉诚', '王富贵']
    被删除的 王富贵
    ['麻花藤', '王剑林林', '李李嘉诚']

# 删除2号元素
el = lst.pop(2)     
print(el)
print(lst)
(2) remove()
用于移除列表中某个值的第一个匹配项

# 删除指定元素
lst.remove("麻花藤")   
print(lst)
# 删除不存在的元素会报错
lst.remove("哈哈")    
print(lst)
Error: ValueError: list.remove(x): x not in list
(3) clear()
- 清空list
(4) 切片删除
del lst[1:3]
print(lst)

3. 修改

lst = ["太白", "太黑", "五色", "银王", "日天"]
lst[1] = "太污"   # 把1号元素修改成太污
print(lst)

lst[1:4:3] = ["麻花藤", "哇靠"]     # 切片修改也OK. 如果步长不是1, 要注意元素的个数
print(lst)

lst[1:4] = ["李李嘉诚个龟儿子"]  # 如果切片没有步长或者步长是1. 则不用关心个数
print(lst)

4. 查询

1. index()

2.for el in lst:    
    print(el)

四、其他操作

1. count()

list.count(obj) #语法

aList = [123, 'Google', 'Runoob', 'Taobao', 123];
print ("123 元素个数 : ", aList.count(123))
print ("Runoob 元素个数 : ", aList.count('Runoob'))
/结果:
123 元素个数 :  2
Runoob 元素个数 :  1

2. len()

len(len) # 方法,返回列表个数
list1 = ['Google', 'Runoob', 'Taobao']
print (len(list1))
list2=list(range(5)) # 创建一个 0-4 的列表
print (len(list2))
/结果:
3
5

3. list()

aTuple = (123, 'Google', 'Runoob', 'Taobao')
list1 = list(aTuple)
print ("列表元素 : ", list1)

str="Hello World"
list2=list(str)
print ("列表元素 : ", list2)
/结果:
列表元素 :  [123, 'Google', 'Runoob', 'Taobao']
列表元素 :  ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

4. reverse()

函数用于翻向列表中元素

list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.reverse()
print ("列表反转后: ", list1)
/结果:
列表反转后:  ['Baidu', 'Taobao', 'Runoob', 'Google']

5. sort()

list.sort(cmp=None, key=None, reverse=False)#该方法没有返回值,但是会对列表的对象进行排序
cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)


aList = ['Google', 'Runoob', 'Taobao', 'Facebook']
aList.sort()
print ( "List : ", aList)
/结果:
List :  ['Facebook', 'Google', 'Runoob', 'Taobao']


vowels = ['e', 'a', 'u', 'o', 'i']# 降序
vowels.sort(reverse=True)
print ( '降序输出:', vowels )
/结果:
降序输出: ['u', 'o', 'i', 'e', 'a']
    
列表的嵌套
li = ['李娜', '韩寒', 'aliex', ['妮妮', 23,'北京']]
print(li[1][1]) # 取韩寒中的寒字
li[0] = li[0].capitalize() # 找的lina首字母大写,并将li中的lina替换掉
print(li)
li[1] = li[1].replace('韩', '国') # 将韩寒的韩改成国
print(li)
n = [1, 2, 'jack', 4, 5, 5, 6, 7, 78, 8, 9, 9]
n[3:4] = 'tony alix'
print(n)
[1, 2, 'jack', 't', 'o', 'n', 'y', ' ', 'a', 'l', 'i', 'x', 5, 5, 6, 7, 78, 8, 9, 9]
n[3:4] = ['tony', 'jone']
print(n)
[1, 2, 'jack', 'tony', 'jone', 5, 5, 6, 7, 78, 8, 9, 9]

6. join

将列表转换为字符串

li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"]
s = "_".join(li)   # 循环遍历列表,把列表中的每一项用''_''拼接
print(s)
结果:
李嘉诚_麻花藤_林海峰_刘嘉玲
li = "花闺"
s = "_".join(li)
print(s)
结果:
花_闺

7. 列表循环删除

li = ['周芷若', '王兴', '周润发', '马云', '周星星']
li_new = [] # 创建一个新列表存储要删除的元素

for el in li: # 循环li,把姓周的装进li_new
    if el.startswith('周'):
        li_new.append(el)

for el_new in li_new: # 循环新列表,删除li中的元素
    li.remove(el_new)
print(li)
结果:['王兴', '马云']

8. 列表浅拷贝

1. old = [1,[2,3]]
   new = old.copy()

2. old = [1,[2,3]]
  new = [i for i in old]

3. old = [1,[2,3]] 
   new = []
   for i in old:
        new.append(old[i])

4. old = [1,[2,3]]
   new = old[:]
posted @ 2019-08-10 14:50  qi.hu  阅读(400)  评论(0编辑  收藏  举报