python---[列表]lsit

内置数据结构(变量类型)

  -list

  -set

  -dict

  -tuple

    -list(列表)

      -一组又顺序的数据组合

      -创建列表

        -空列表

        list1 = []
        print(type(list1))
        print(list1)

        list2 = [100]
        print(type(list2))
        print(list2)

        list3 = [2, 3, 1, 4, 6, 5, 6]
        print(type(list3))
        print(list3)

        list4 = list()
        print(type(list4))
        print(list4)


        运行结果:
        <class 'list'>
        []
        <class 'list'>
        [100]
        <class 'list'>
        [2, 3, 1, 4, 6, 5, 6]
        <class 'list'>
        []

    -列表常用操作

      -访问

        -使用下表操作

        -列表的位置是从0开始

        list1 = [2, 3, 1, 4, 6, 5, 6]
        print(list1[3])

        print(list1[0])

        

        运行结果:

        4

        2

    -分片操作

    -注意截取的范围, 包含左边的下标值,不包含右边的下标值

    -下标值可以为空,如果不写左边下标值默认为0,右边下标值最大数加一,即表示截取最后一个数据

      list1 = [2, 3, 1, 4, 6, 5, 6]
      print(list1[:])
      print(list1[:4])
      print(list1[3:])

      运行结果:

      [2, 3, 1, 4, 6, 5, 6]
      [2, 3, 1, 4]
      [4, 6, 5, 6]

      

      -分片可以控制增长幅度,默认增长幅度为1

      list1 = [2, 3, 1, 4, 6, 5, 6]
      print(list1[:])
      print(list1[1:6:1])
      print(list1[1:6:2])

      运行结果:

      [2, 3, 1, 4, 6, 5, 6]
      [3, 1, 4, 6, 5]
      [3, 4, 5]

      

      -下标可以超出范围,超出后不在考虑多余下表内容

      list1 = [2, 3, 1, 4, 6, 5, 6]
      print(list1[2:10])

      运行结果:

      [1, 4, 6, 5, 6]

 

      -下标值, 增长幅度可以为负数

      -为负数,表明顺序是从右往左

      -规定:数组最后一个数字的下标是-1

      

      -分片之负数下标

      -默认分片总是从左往右截取

      -即正常情况,分片左边的值一定小于右边的值

      list1 = [2, 3, 1, 4, 6, 5, 7]
      print(list1[-2:-4])
      print(list1[-4:-2])
      print(list1[-2:-4:-1])
      print(list1[-3:-5:-1])

      运行结果:

      []
      [4, 6]
      [5, 6]
      [6, 4]

 

      -分片操作是生成要给新的list

        -内置函数id,负责显示一个变量或者数据的唯一确定编号

        a = 100
        b = 200
        print(id(a))
        print(id(b))
        c = a
        print(id(c))

        运行结果:

        1967290496
        1967293696
        1967290496
        100

        -通过id可以直接判断出分片是从新生成了一份数据还是使用的同一份数据

        

        -如果两个id之一样,则表明分片产生的列表是使用的同一地址同一份数据

        -否则,则表明分片是重新生成了一份数据,即一个新的列表,然后把数据拷贝到新列表中

          -通过id知道,list2和list3是同一份数据,验证代码如下:

          list1 = [2, 3, 1, 4, 6, 5, 7]
          list2 = list1[:]
          list3 = list2
          print(id(list1))
          print(id(list2))
          print(id(list3))

          list1[0] = 100
          print(list1)
          print(list2)
          list2[1] = 100
          print(list2)
          print(list3)

          运行结果:

          2252262765960
          2252261913544
          2252261913544
          [100, 3, 1, 4, 6, 5, 7]
          [2, 3, 1, 4, 6, 5, 7]
          [2, 100, 1, 4, 6, 5, 7]
          [2, 100, 1, 4, 6, 5, 7]

- List(列表)

 1  1 # del删除
 2  2 # 如果使用del之后, id的值和删除钱不一样, 则说明删除生成一个新的list
 3  3 b = [1, 2, 3, 4, 5, 6]
 4  4 print(id(b))
 5  5 del b[2]
 6  6 print(id(b))
 7  7 print(b)
 8  8 # del 一个变量之后不能在继续使用此变量
 9  9 del b
10 10 print(b)
11 
12 运行结果:
13 2429916837256
14 2429916837256
15 [1, 2, 4, 5, 6]
16 NameError: name 'b' is not defined
del删除命令
 1 # 列表相加
 2 # 使用加号连接两个列表
 3 a = [1, 2, 3, 4]
 4 b = [5, 6, 7, 8, 9]
 5 c = ['a', 'b', 'c']
 6 d = a + b + c
 7 print(d)
 8 
 9 运行结果:
10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c']
View Code
1 # 使用乘号操作列表
2 # 列表直接跟一个整数相乘
3 # 相当于把n个列表连接在一起
4 a = [1, 2, 3, 4]
5 b = a * 3
6 print(b)
7 
8 运行结果:
9 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
list相乘
 1 # 成员资格运算
 2 # 就是判断一个元素是否在list里面
 3 a = [1, 2, 3, 4, 5, 6, 7]
 4 b = 8
 5 c = 5
 6 # 返回一个布尔值
 7 print(b in a)
 8 print(c in a)
 9 运行结果:
10 False
11 True
资格运算
 1 # 成员资格运算
 2 # 就是判断一个元素是否在list里面
 3 a = [1, 2, 3, 4, 5, 6, 7]
 4 b = 8
 5 c = 5
 6 # 返回一个布尔值
 7 print(b in a)
 8 print(c in a)
 9 print(c not in a)
10 
11 运行结果:
12 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
13 False
14 True
15 False
资格运算

 

 

 1 # for i in list
 2 a = [1, 2, 3, 4, 5]
 3 for i in a:
 4     print(i, end=" ")
 5 print()
 6 
 7 b = ["a", "b", "c", "d"]
 8 for i in b:
 9     print(i, end=" ")
10 print()
11 
12 for i in range(1,10):
13     print(i, end=" ")
14 
15 print(type(range(1, 10)))
16 
17 # while 循环访问list
18 # 一般不使用while遍历list
19 c = [1, 2, 3, 4, 5, 6, 7]
20 lenth = len(c)
21 indx = 0
22 while indx < lenth:
23     print(c[indx], end=" ")
24     indx += 1
25 
26 
27 
28 运行结果
29 1 2 3 4 5 
30 a b c d 
31 1 2 3 4 5 6 7 8 9 <class 'range'>
32 1 2 3 4 5 6 7 

 

 

 

 1 # 双层列表循环
 2 # a 为嵌套列表, 或者叫双层列表
 3 a = [["one", 1], ["two", 2], ["tree", 3]]
 4 for k, v in a:
 5     print(k, "--", v)
 6 
 7 # b = [["one", 1, "eins"], ["two", 2], ["tree", 3, 4, 5, 6]]
 8 # for k, v in b:
 9 #     print(k, "--", v)
10 # # 不能这么使用
11 
12 c = [["one", 1, "eins"], ["two", 2, "zwei"], ["tree", 3, "drei"]]
13 for k, v, w in c:
14     print(k, "--", v, "--", w)
15 
16 # 列表内涵:list content
17 # 通过简单的方法创作列表
18 # for 创建
19 a = ['a', 'b', 'c']
20 #用list a创建一个list b 、
21 # 下面代码的含义是, 对于所有a中的元素, 逐个放入新列表b中
22 b = [i for i in a]
23 print(b)
24 
25 # 对于c中所以元素乘以10, 生成一个新list
26 c = [1, 2, 3, 4, 5]
27 #用list c创建一个list d 、
28 # 下面代码的含义是, 对于所有c中的元素, 逐个放入新列表d中
29 d = [i*10 for i in c]
30 print(d)
31 
32 # 还可以过滤原来list中的内容并放入新列表
33 # 比如有列表e, 需要把所有e中的偶数生成新的列表f
34 e = [x for x in range(1, 31)]#生成也1,30 的列表
35 # 把f中所以偶数生成一个新列表f
36 f = [m for m in e if m % 2 == 0]
37 print(f)
38 
39 # 列表生成式可以嵌套
40 # 有两个列表a, b
41 a = [i for i in range(1, 4)]#生成list a
42 print(a)
43 b = [i for i in range(100, 400) if i % 100 == 0]
44 print(b)
45 
46 # 列表生成式可以嵌套, 此时等于俩个for循环嵌套
47 c = [m+n for m in a for n in b]
48 print(c)
49 
50 # 上面代码类似下面代码
51 for m in a:
52     for n in b:
53         print(m+n, end="  ")
54 print()
55 # len:求列表长度
56 a = [x for x in range(1, 100)]
57 print(len(a))
58 # max:求列表中的最大值
59 print(max(a))
60 b = ['man', 'film', 'python']
61 print(max(b))
62 
63 # list:将其他格式的数据转换成list
64 a = [1, 2, 3]
65 print(list(a))
66 s = "I love python"
67 print(list(s))
68 
69 # 把range产生的内容转换成list
70 print(list(range(12, 19)))

# 关于列表的函数

 1 # 关于列表的函数
 2 
 3 list1 = ['a', 'i love xj', 45, 766, 5+4j]
 4 print(list1)
 5 # append插入一个内容
 6 a = [i for i in range(1,5)]
 7 print(a)
 8 a.append(100)
 9 print(a)
10 # insert:指定位置插入
11 # insert(index, data), 插入位置是insert前面(完成后处于什么位置)
12 a.insert(3, 200)
13 print(a)
14 # del:删除
15 # pop, 从对应位拿出一个元素, 即把最后一个元素取出来
16 last_ele = a.pop()
17 print(last_ele)
18 print(a)
19 
20 # remove:在列表中删除指定的值的元素
21 # 如果被删除的值没在list中,则报错
22 # 即, 删除list指定值的操作应该使用try。。。excepty语句,或者先进行判断
23 print(id(a))
24 a.remove(200)
25 print(a)
26 print(id(a))

运行结果:
['a', 'i love xj', 45, 766, (5+4j)]
[1, 2, 3, 4]
[1, 2, 3, 4, 100]
[1, 2, 3, 200, 4, 100]
100
[1, 2, 3, 200, 4]
2354949945480
[1, 2, 3, 4]
2354949945480

 1 # clear:清空
 2 a = [1, 2, 3, 4, 5]
 3 
 4 print(a)
 5 print(id(a))
 6 a.clear()
 7 print(a)
 8 print(id(a))
 9 print("--------------")
10 # 如果不需要列表地址保持不变, 则清空列表可以使用以下方式
11 b = [1, 2, 3]
12 print(b)
13 print(id(b))
14 b = list()
15 b = []
16 print(b)
17 print(id(b))

运行结果:
[1, 2, 3, 4, 5]
1834734417288
[]
1834734417288
--------------
[1, 2, 3]
1834734417160
[]
1834734417160  #加上b = list()地址还是保持不变


# 如果不需要列表地址保持不变, 则清空列表可以使用以下方式
b = [1, 2, 3]
print(b)
print(id(b))
# b = list()
b = []
print(b)
print(id(b))


运行结果:
[1, 2, 3]
2191356032264
[]
2191355209608  #不加上b = list()地址会发生改变

 

 1 # reverse:翻转列表内容,原地翻转
 2 a = [1, 2, 3, 4, 5]
 3 print(a)
 4 print(id(a))
 5 a.reverse()
 6 print(a)
 7 print(id(a))
 8 
 9 运行结果:
10 [1, 2, 3, 4, 5]
11 1986270295432
12 [5, 4, 3, 2, 1]
13 1986270295432

 

 1 # extend:扩展列表,两个列表,把一个直接拼接到后一个上
 2 a = [1, 2, 3, 4, 5]
 3 b = [6, 7, 8, 9, 10]
 4 print(a)
 5 print(id(a))
 6 a.extend(b)
 7 print(a)
 8 print(id(a))
 9 运行结果:
10 [1, 2, 3, 4, 5]
11 1657976485256
12 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
13 1657976485256

 


 1 # count:返查找列表中指定值或元素的个数
 2 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 3 print(a)
 4 a.append(8)
 5 a.insert(4, 8)
 6 print(a)
 7 a_len = a.count(8)
 8 print(a_len)
 9 
10 运行结果:
11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
12 [1, 2, 3, 4, 8, 5, 6, 7, 8, 9, 10, 8]
13 3

 

 1 # copy:拷贝, 浅拷贝
 2 # 列表类型变量赋值实例
 3 a = [1, 2, 3, 4, 5, 666]
 4 print(a)
 5 # list类型,简单赋值操作,是传地址
 6 b = a
 7 b[-1] = 777
 8 print(a)
 9 print(id(a))
10 print(b)
11 print(id(b))
12 
13 print("*" * 20)
14 b = a.copy()
15 print(a)
16 print(id(a))
17 print(b)
18 print(id(b))
19 
20 print("*" * 30)
21 b[-1] = 888
22 print(a)
23 print(b)
24 
25 运行结果:
26 [1, 2, 3, 4, 5, 666]
27 [1, 2, 3, 4, 5, 777]
28 2546992182664
29 [1, 2, 3, 4, 5, 777]
30 2546992182664
31 ********************
32 [1, 2, 3, 4, 5, 777]
33 2546992182664
34 [1, 2, 3, 4, 5, 777]
35 2546992182536
36 ******************************
37 [1, 2, 3, 4, 5, 777]
38 [1, 2, 3, 4, 5, 888]

 

 
1
# cpoy:拷贝,浅拷贝和深拷贝区别 2 # 出现下面问题是,copy函数是个浅拷贝,即只可拷贝一层内容 3 a = [1, 2, 3, [10, 20, 30]] 4 b = a.copy() 5 print(id(a)) 6 print(id(b)) 7 print(id(a[3])) 8 print(id(b[3])) 9 10 a[3][2] = 666 11 print(a) 12 print(b) 13 14 运行结果: 15 2337052980168  #a和b的id不一样 16 2337053832456   17 2337053832584  #a和b内部深一层的id是一样的 18 2337053832584   19 [1, 2, 3, [10, 20, 666]]  20 [1, 2, 3, [10, 20, 666]]

 







 

posted @ 2018-09-26 10:17  Supl  阅读(364)  评论(0编辑  收藏  举报