python 列表(list)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ruanxingzi123/article/details/83188390

字符串可以修改吗?

s = “123456789”

字符串是不可变对象,属于序列。可以使用索引访问,索引可以是整数,也可以是负数,支持切片访问等。列表也是Python内建的一种数据结构,属于序列。

一、列表

1、列表定义

  1)列表是python的一个内建数据结构

  2)可以把列表看做一个容器

  3)该容器被隔成不同的空间,每个空间可以放任何类型“物”

  4)列表内物体只有前后的位置关系

  5)列表每个格子中的“物”是可以替换的

  6)列表是一个可变的序列

2、创建列表语法

  1)列表定义的语法 []

       ----列表名 = [列表内容.......]

       某些情况下,列表名 和“=”可以省略,列表可以为空列表

  2)列表定义举例

       ---[100,200,300]

      --- L=[]

      ---L=["A","B","F","g"]

      ---L =[1,"hello",2,"world"]

      ---L =[1,2,[1,2,3,4,5],"y","i"]

      ---L =[1,2,(1,2,3),9]

     ----L =[1,2,3,4,{5,6,"y","i"},8]

      ----L =[1,2,3,4,{"name":"alex","age":12},8]

3、使用list函数创建列表

   1)使用列表(list)函数创建列表    

函数 说明
list() 生产一个空列表,等同于[]
list(iterable) 用可迭代对象初始化一个列表

    2)示例       

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

L = list()
L = list("abc")
s = "suzhou"
P =list(s)
q =list([1,2,3])
print(L)
print(P)
print(q)

"""
['a', 'b', 'c']
['s', 'u', 'z', 'h', 'o', 'u']
[1, 2, 3]
Process finished with exit code 0
"""

4、列表运算

   1)+运算

      列表链接

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3] +["a","b","c"]
b = [9,10]
c = a+b
print(c)

"""
[1, 2, 3, 'a', 'b', 'c', 9, 10]
Process finished with exit code 0
"""

    2)+=运算

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"a","b","c"]
a+=["alex","rose"]
print(a)

"""
[1, 2, 3, 'a', 'b', 'c', 'alex', 'rose']
Process finished with exit code 0
"""

  3) *运算(复制)

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=["alex","rose"]*8
print(a)

"""
['alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose']
Process finished with exit code 0
"""

  4) *=运算

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=["alex","rose"]*8
print(a)

"""
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
Process finished with exit code 0
"""

 列表关系运算:返回True或者False

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3]
b=[1,2,3]
c=[4,5,6]
print(a!=b)
print(a==b)
print(a<c)
print(b>c)

"""
False
True
True
False

Process finished with exit code 0
"""

列表 in 和 not in 运算

如果对象在列表中返回True或者False

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3]
b=1
c=8
print(b in a)
print(c not in a)

"""
True
True

Process finished with exit code 0
"""

列表and,or,not 运算

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3]
b=[1]
c=[8]

print(a and b)
print(a or b)
print(not a)


"""
[1]
[1, 2, 3]
False

Process finished with exit code 0
"""

5、列表索引与切片访问 

   1)l列表索引与切片访问

      索引从0开始,列表最后一个成员的索引为列表长度-1   

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"alex",9,4]
b=a[0] #索引为负时,-1最后一个,向前类推-2就是倒数第二个
a[0]=8
c = a[-1]
print(a)
print(c)
"""
[8, 2, 3, 'alex', 9, 4]
4

Process finished with exit code 0
"""

 列表切片slice

    ----切片语法同字符串【起始:结束:步长】

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"alex",9,4,5,6,7,8]
b=a[1:9:2]
print(b)
c = a[0:-3]
print(c)
f =a[-3:]
print(f)

"""
[2, 'alex', 4, 6]
[1, 2, 3, 'alex', 9, 4, 5]
[6, 7, 8]


Process finished with exit code 0
"""

 ----通过切片获取新列表

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"alex",9,4,5,6,7,8]
b=a[1:5]
print(b)
c = a[:]  #复制列表
print(c)

"""
[2, 3, 'alex', 9]
[1, 2, 3, 'alex', 9, 4, 5, 6, 7, 8]

Process finished with exit code 0
"""

 -----列表切片赋值

切片赋值可以一次修改对个列表元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"alex",9,4,5,6,7,8]
a[1:3] =["hello","world"]
print(a)


"""
[1, 'hello', 'world', 'alex', 9, 4, 5, 6, 7, 8]

Process finished with exit code 0
"""

切片赋值可以增加列表元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,"alex",9,4,5,6,7,8]
a[1:] =["hello","world","alex","rose"]
print(a)


"""
[1, 'hello', 'world', 'alex', 'rose']

Process finished with exit code 0
"""

列表切片赋值

切片赋值可以不替换任何元素情况下,为列表插入新元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1, 'hello', 'world', 'alex', 'rose']
a[2:2]=["a","b"]
print(a)


"""
[1, 'hello', 'a', 'b', 'world', 'alex', 'rose']

Process finished with exit code 0
"""

切片赋值可以删除列表元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1, 'hello', 'world', 'alex', 'rose']
a[2:4]=[]
print(a)


"""
[1, 'hello', 'rose']

Process finished with exit code 0
"""

6、Python3中常用列表函数

    1)len函数:可以用来得到序列的长度

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1, 'hello', 'world', 'alex', 'rose']
b = len(a)
print(b)


"""
5

Process finished with exit code 0
"""

    2)max函数:可以用来得到序列最大值的元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2, 99,56,88]
b = max(a)
print(b)

"""
99

Process finished with exit code 0
"""

     3)min函数:可以得到列表中最小的元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2, 99,56,88]
b = ["a","yy","dd"]
c =["a",1,"4"]
print(min(a))
print(min(b))
print(min(c)) #报错
"""
1
a
print(min(c))
TypeError: '<' not supported between instances of 'int' and 'str'

Process finished with exit code 0
"""

  4)sum函数

      ---可以得到列表中所有元素的和

     ---sum(列表【,起始值】)

     ---起始值可以省略,缺省为0

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3]
b = sum(a)
print(b,type(b))
d = sum([b,10])
print(d)
"""
6 <class 'int'>
16

Process finished with exit code 0
"""

    5).index函数:得到列表中某个元素的索引(下标)

      ---L.index(value)

      ---value:要找的元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,33,88,9]
b = a.index(9) #相同的元素只会操作第一次出现的位置
print(b)

"""
5

Process finished with exit code 0
"""

6).append函数

     ----L.append(object)

     ----object要添加的元素

     ----返回None

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,33,88,9]
b = a.append("alex")
print(a)
print(b)
c = a.append([11,22])
print(a)
print(c)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'alex']
None
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'alex', [11, 22]]
None

Process finished with exit code 0
"""

7)合并列表(extend)

   向列表追加另一个列表

     ----L.extend(iterable)

     ----iterable要添加的元素(可以迭代对象)

     ----返回None

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,33,88,9]
b = a.extend("alex") 
print(a)
print(b)
c = a.extend(100)
print(a)
print(c)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'a', 'l', 'e', 'x']
None
 c = a.extend(100)
TypeError: 'int' object is not iterable

Process finished with exit code 0
"""

    跟元组一样,用加号(+)将两个列表加起来即可实现合并:

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

x=list(range(1, 13, 2))

x + ['b', 'a']

print(x)
"""
[1, 3, 5, 7, 9, 11, 'b', 'a']

Process finished with exit code 0
"""

    对于已定义的列表,可以用extend方法一次性添加多个元素:

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

x=[1, 3, 5, 7, 9, 11]
x2=[3, 6, 1]
x.extend(x2)
print(x)

"""
[1, 3, 5, 7, 9, 11, 3, 6, 1]

Process finished with exit code 0
"""

需要说明的是:加号(+)执行列表的合并是非常浪费资源的,因为必须创建一个新列表并将所有对象复制过去,而用extend将元素附加到现有列表(尤其是在构建一个大列表时)就会好很多。

 因此,在进行列表合并操作时,尤其是对于大数据量的列表合并,强烈建议使用extend函数。

8).insert函数:向列表指定位置插入元素

    ---L.insert(index,object)

    ---index:位置

    ---object要插入的元素

    ---返回None

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,33,88,9]
b = a.insert(2,["alex","rose"])
print(a)
print(b)
c = a.insert(5,100)
print(a)
print(c)
"""
[1, 2, ['alex', 'rose'], 3, 5, 6, 9, 10, 33, 88, 9]
None
[1, 2, ['alex', 'rose'], 3, 5, 100, 6, 9, 10, 33, 88, 9]
None

Process finished with exit code 0
"""

9).pop函数

     ---L.pop([index])

     ---删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回移除元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,33,88,9]
b = a.pop()
print(a)
print(b)
c = a.pop(2)
print(a)
print(c)
d = a.pop(-1)
print(a)
print(d)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88]
9
[1, 2, 5, 6, 9, 10, 33, 88]
3
[1, 2, 5, 6, 9, 10, 33]
88

Process finished with exit code 0
"""

   10).remove函数:

         ---L.remove(x)

         ---从列表中删除第一次出现在列表中的值

         ---返回None

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
b = a.remove(5)
print(a)
print(b)
c = a.remove("alex")
print(a)
print(c)

"""
[1, 2, 3, 6, 9, 10, 'alex', 33, 88, 9]
None
[1, 2, 3, 6, 9, 10, 33, 88, 9]
None

Process finished with exit code 0
"""

11)del 语句删除列表元素

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
b = a.remove(5)
print(a)
print(b)
c = a.remove("alex")
print(a)
print(c)

"""
[1, 2, 3, 6, 9, 10, 'alex', 33, 88, 9]
None
[1, 2, 3, 6, 9, 10, 33, 88, 9]
None

Process finished with exit code 0
"""

12).copy函数

      ---L.copy()  浅复制处解析

      ---复制此列表(只复制一层,不会复制深层对象)

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
b =a.copy()
print(a,id(a))
print(b,id(b))
c =a is b
print(c)
d =a
print(d,id(d))

"""
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549704
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549744
False
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549704
Process finished with exit code 0
"""

13).reverse

       ---列表的反转,只反转排列顺序,列表的值是不会改变的

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
print("反转前的数据===》",a)
b =a.reverse()
print("反转后的数据===》",a)
print(b)


"""
反转前的数据===》 [1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
反转后的数据===》 [9, 88, 33, 'alex', 10, 9, 6, 5, 3, 2, 1]
None
Process finished with exit code 0
"""

14).sort

     --Lsort(reverse = False)

     ---将列表的顺序按值得小到大的顺序进行排列

 列表的sort方法可以实现就地排序(无需创建新对象,字符串按首字母进行排序):

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,72,3,45,6,9,10,33,88,9]
print("排序前的数据===》",a)
b =a.sort()
print("排序后的数据===》",a)
print(b)
s=['a','ab','3e','z']
print("排序前的数据===》",s)
g=s.sort()
print("排序后的数据===》",s)


"""
排序前的数据===》 [1, 72, 3, 45, 6, 9, 10, 33, 88, 9]
排序后的数据===》 [1, 3, 6, 9, 9, 10, 33, 45, 72, 88]
None
排序前的数据===》 ['a', 'ab', '3e', 'z']
排序后的数据===》 ['3e', 'a', 'ab', 'z']
Process finished with exit code 0
"""


 

sort有几个很好用的选项,一个是次要排序键,即一个能够产生可用于排序的值的函数。如可以通过长度对一组字符串进行排序:

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

b=['a','nl','drz','mowgt','aa']
b.sort(key=len)
print(b)


"""
['a', 'nl', 'aa', 'drz', 'mowgt']
Process finished with exit code 0
"""

 再比如是否进行降序排列,如下面通过对首字母进行降序排列的示例:

__author__ = 'Administrator'

# -*- coding:utf-8 -*-
b=['a','nl','drz','mowgt','aa']
b.sort(key= lambda x:x[0], reverse=True)
print(b)


"""
['nl', 'mowgt', 'drz', 'a', 'aa']
Process finished with exit code 0
"""


 

15).clean:清空列表

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
print("清空前的数据===》",a)
b =a.clear()
print("清空后的数据===》",a)
print(b)


"""
清空前的数据===》 [1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
清空后的数据===》 []
None
Process finished with exit code 0
"""

7、列表的遍历

    1)使用while循环

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
i=0
while i<len(a):
    print(a[i])
    i+=1


"""
1
2
3
5
6
9
10
alex
33
88
9
Process finished with exit code 0
"""

   2)使用for循坏

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
for i in a:
    print(i)


"""
1
2
3
5
6
9
10
alex
33
88
9
Process finished with exit code 0
"""

8、列表复制

  浅复制只复制一层

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a=[1,2,3,5,6,9,10,"alex",33,88,9]
b=a
print(b)
b[0]="rose"
print(b)
print(a)
print(a is b)


"""
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
['rose', 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
['rose', 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
True

Process finished with exit code 0
"""

深拷贝需要使用copy模块

---全部复制

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

import copy

a=[1,2,3,5,[6,9,10],"alex",33,88,9]
b = copy.deepcopy(a)
print(a,id(a))
print(b,id(b))
print(a is b)
b[4][0]=40
print(b)



"""
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9] 47178256
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9] 47179016
False
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9]
[1, 2, 3, 5, [40, 9, 10], 'alex', 33, 88, 9]

Process finished with exit code 0
"""

9、列表推导式语法

列表推导式是用可迭代对象依次生成列表内元素的方式

语法:

【表达式for 变量 in 可迭代对象】

【表达式 for 变量 in 可迭代对象 if 条件语句】

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

y = [ x**2 for x in range(1,10)]
print(y)
z =[x**2 for x in range(1,10) if x%2==1]
print(z)



"""
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 9, 25, 49, 81]

Process finished with exit code 0
"""

列表推导式嵌套语法

【表达式1 for 变量1 in 可迭代对象1 if 条件语句1 for 变量2 in 可迭代对象3 if 条件语句2】

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

y = [x*y for x in [2,3,5] for y in [7,11,13]]
print(y)


"""
[14, 22, 26, 21, 33, 39, 35, 55, 65]

Process finished with exit code 0
"""

10、列表与字符串

       字符串拆分与拼接

        ----S.split (sep = None,maxsplit = -1)    --->list of string

        -----S.join(iterable)   ---->str

__author__ = 'Administrator'

# -*- coding:utf-8 -*-

a="beijing is captical !"
b =a.split(" ")
print(b)
c = a.split(maxsplit=1)
d = a.split(maxsplit=2)
f = a.split(maxsplit=3)
print(c)
print(d)
print(f)

print("-------join--------")
g="/"
print(g)
h = g.join(["C:","progrom file","python"])
print(h)

"""
['beijing', 'is', 'captical', '!']
['beijing', 'is captical !']
['beijing', 'is', 'captical !']
['beijing', 'is', 'captical', '!']
-------join--------
/
C:/progrom file/python


Process finished with exit code 0
"""

11、字符串与列表比较

       ---列表 和字符串都是序列,元素之间有先后关系

       ---字符串中的每个元素只能存储字符,而列表可以存储任意类型

       ---字符串是不可变的序列,而列表是可以改变的序列

猜你喜欢

转载自blog.csdn.net/ruanxingzi123/article/details/83188390