Python08:列表
列表:python中以[]表示一个列表,取其中一个值是变量名[n],n是代表列表中的下标值。
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three', 'four']
Process finished with exit code 0 |
解释:
names = ["One","Two","Three","four"]:定义列表变量names,并设定names的值
print(names):打印变量names
操作:
#!/usr/bin/env python
|
输出:
Three
Process finished with exit code 0 |
解释:
print(names[2]):查询下标为2的元素(下标从0开始)。
切片操作:
#!/usr/bin/env python
|
输出:
['Two']
Process finished with exit code 0 |
解释:
print(names[1:2]):切片操作,起始位置为1,终止位置为2,包含起始而不包含终止位置。
查询操作:
#!/usr/bin/env python
|
输出:
four
Process finished with exit code 0 |
解释:
print(names[-1]):查询最后一个元素。
切片操作:
#!/usr/bin/env python
|
输出:
[]
Process finished with exit code 0 |
解释:
print(names[-1:-3]):错误的切片操作,起始位置要在终止位置的前边,故输出为空。
切片操作:
#!/usr/bin/env python
|
输出:
['Two', 'Three']
Process finished with exit code 0 |
解释:
print(names[-3:-1]):同上一步比较,这个是正常的用负数作切片查询操作。
切片操作:
#!/usr/bin/env python
|
输出:
['Three', 'four']
Process finished with exit code 0 |
解释:
print(names[-2:]):最后一位参数为空,则取到列表最后,此时包含最后一位元素。
切片操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three'] ['One', 'Two', 'Three']
Process finished with exit code 0 |
解释:
print(names[:3]):如果起始索引不写,则从0开始查找,同print(names[0:3])一样的结果。
添加操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three', 'four', 'LeiMing']
Process finished with exit code 0 |
解释:
names.append("LeiMing"):向列表最后追加元素。
添加操作:
#!/usr/bin/env python
|
输出:
['One', 'Buck', 'Two', 'Three', 'four']
Process finished with exit code 0 |
解释:
names.insert(1,"Buck"):向指定位置添加元素,第一个参数是下标位置,第二个参数是添加的值。
修改操作:
#!/usr/bin/env python |
输出:
['One', 'Two', 'Join', 'four']
Process finished with exit code 0 |
解释:
names[2] = "Join":元素的修改,找到修改的下标,直接赋值。
删除操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'four']
Process finished with exit code 0 |
解释:
names.remove("Three"):删除元素,参数填写要删除的值,直接删除。
删除操作:
#!/usr/bin/env python
|
输出:
['One', 'Three', 'four']
Process finished with exit code |
解释:
del names[1]:删除下标为1的元素。
删除操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three']
Process finished with exit code 0 |
解释:
names.pop():删除操作,不写参数默认删除最后一位元素。
删除操作:
#!/usr/bin/env python
|
输出:
['One', 'Three', 'four']
Process finished with exit code 0 |
解释:
names.pop(1):删除元素,填写数字,删除对应的下标的元素。
操作:
#!/usr/bin/env python
|
输出:
1
Process finished with exit code 0 |
解释:
print(names.index("Two")):查询列表中元素是”Two”的下标。
方法操作:
#!/usr/bin/env python
|
输出:
3
Process finished with exit code 0 |
解释:
print(names.count("Two")):统计元素个数,此次统计为”Two”的元素个数。
方法操作:
#!/usr/bin/env python
|
输出:
['four', 'Three', 'Two', 'One']
Process finished with exit code 0 |
解释:
names.reverse():反转列表中的元素。
方法操作:
#!/usr/bin/env python
|
输出:
['#Three', '2Two', 'One', 'four']
Process finished with exit code 0 |
解释:
names.sort():给列表中的元素排序,默认原则是以ASCII码的顺序,特殊字符、数字、大写字母、小写字母常见的。
方法操作:
#!/usr/bin/env python
|
输出:
[]
Process finished with exit code 0 |
解释:
names.clear():清空列表。
方法操作:
#!/usr/bin/env python
|
输出:
['One', '2Two', '#Three', 'four', 'HanMei', 'LiLei', 'FengHua'] ['HanMei', 'LiLei', 'FengHua']
Process finished with exit code 0 |
解释:
names.extend(names2):将列表names2追加到names。
方法操作:
#!/usr/bin/env python
|
输出:
['One', '2Two', '#Three', 'four'] Traceback (most recent call last): File "E:/python_code/s14/day2/names.py", line 10, in <module> print(names2) NameError: name 'names2' is not defined
Process finished with exit code 1 |
解释:
del names2:删除names2,打印列表names2的时候报错,因为已删除。
浅拷贝方法操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three', 'Four', 'Five'] ['One', 'Two', 'Three', 'Four', 'Five']
Process finished with exit code 0 |
解释:
names2 = names.copy():列表的拷贝,此方法是浅拷贝,何为浅拷贝,参考后边讲解。
浅拷贝方法操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three', 'Four', 'Five', ['jack', 'ROSE']] ['One', 'Two', 'mclind', 'Four', 'Five', ['jack', 'ROSE']]
Process finished with exit code 0 |
解释:
可以看到,拷贝完列表,当改变names2当中的字符串时,只改变names2中的字符串,names当中的字符串不变,当改变names2列表当中的列表时,names当中的列表也跟着变化了。这是因为在浅复制当中,复制的是地址,并不是新创建了地址空间。字符串的是无法改变的(要想修改指向的字符串,变量名看起来不变,其实是新创建了一个字符串,变量名指向了新创建的字符串的地址,变量的值也就跟着变化了,而原来字符串的地址是不变的),所以names[2]指向的是字符串, 修改names[2]是指向了新的地址,而names没有修改,地址不变,值不受影响。当修改names[5][0]的时候,修改的是列表中列表,而列表中的列表的地址并没有改变,由于names[5]指向的地址没有改变,但names2修改了其中的内容,所以names指向的地址的内容也变化了,所以names2[5][0]的修改也影响了names的内容。
用指针更容易理解和解释,但python中并没有指针的概念。
浅拷贝还有别的方法:names2=copy.copy(names) 注:需导入copy模块。
names2=names[:]
names2=list(names),三种结果一样,浅拷贝。
深复制方法操作:
#!/usr/bin/env python
|
输出:
['One', 'Two', 'Three', 'Four', 'Five', ['JACK', 'ROSE']] ['One', 'Two', 'mclind', 'Four', 'Five', ['jack', 'ROSE']]
Process finished with exit code 0 |
解释:
names2 = copy.deepcopy(names):导入copy模块,再使用深拷贝方法deepcopy(),深拷贝是完全独立的复制出来列表,开辟新的内存空间,一般不使用。
for循环的别样操作:
#!/usr/bin/env python
|
输出:
One Two Three Four Five ['JACK', 'ROSE']
Process finished with exit code 0 |
解释:
遍历列表中的元素,然后打印出来。这时候也可以用步长切片。