day5---列表和元组

1. 列表

列表的特点

  • 列表是有序的

  • 列表是可变的

  • 列表支持切片、索引、步长

  • 列表支持增删改的操作

  • 列表支持嵌套使用

列表的切片

索引的方法和字符串的索引一样,使用列表元素的下标。

切片的方法也和字符串的切片一样,但是切片后的结果是列表。

列表跟字符串一样,切片时支持步长和反向步长。

var_select = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_select)
print(var_select[2])
print(var_select[1:-4])
print(var_select[1::2])
for i in var_select:
    print(i)
>>>
['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
yy
[20, 'yy']
[20, 'yan', 'yy']
liyan
20
yy
yan
True
yy
liyan

列表的增删改查

增加:

  • insert:根据指定下标增加

var_insert = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_insert.insert(1, 'yange'))
print(var_insert)
>>>
None
['liyan', 'yange', 20, 'yy', 'yan', True, 'yy', 'liyan']
  • append:在列表最后增加

var_insert = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_insert.append('yange'))
print(var_insert)
>>>
None
['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan', 'yange']
  • extend:在列表的最后迭代增加

var_insert = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_insert.extend('yange'))
print(var_insert)
>>>
None
['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan', 'y', 'a', 'n', 'g', 'e']

删除:

  • pop:按照下标删除,有返回值(返回已删除的元素名),超过索引值会报错

var_delete = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_delete.pop(0))
print(var_delete)
>>>
liyan
[20, 'yy', 'yan', True, 'yy', 'liyan']
  • remove:根据指定字符或字符串删除第一个匹配的列表元素名,无返回值,若列表中不存在元素会报错

var_delete = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_delete.remove('yy'))
print(var_delete)
print(var_delete.remove('yy1'))
>>>
None
['liyan', 20, 'yan', True, 'yy', 'liyan']
ValueError: list.remove(x): x not in list
  • clear:清空列表

var_delete = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var_delete.clear())
print(var_delete)
>>>
None
[]
  • del:按照下标删除、或者切片删除,也可以删除列表,无返回值

var_delete = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
del var_delete[0]
print(var_delete)
del var_delete[-3:-1]
print(var_delete)
del var_delete[-1:0:-2]
print(var_delete)
>>>
[20, 'yy', 'yan', True, 'yy', 'liyan']
[20, 'yy', 'yan', 'liyan']
[20, 'yan']

修改:

  • 根据元素下标进行修改

var_update = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
var_update[0] = 'yange'
print(var_update)
>>>
['yange', 20, 'yy', 'yan', True, 'yy', 'liyan']
  • 根据元素切片进行修改(根据切片修改时是先删除切片范围内的元素,再把指定的字符或字符串迭代添加到列表中的切片位置。如果修改的值是一个列表,把列表中的元素添加到列表中的切片位置。)

var_update = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
var_update[2:5] = 'yange'
print(var_update)
>>>
['liyan', 20, 'y', 'a', 'n', 'g', 'e', 'yy', 'liyan']

查询:列表查询是根据索引、切片、循环的方式来获取

列表的其他操作

  • count:统计某个元素在列表中出现的次数

var = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var.count('liyan'))
>>>
2
  • len:统计列表中所有元素的个数(统计列表长度)

var = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(len(var))
>>>
7
  • index:在列表中找出指定字符或字符串第一个匹配项的下标,支持切片,找不到会报错

var = ['liyan', 20, 'yy', 'yan', True, 'yy', 'liyan']
print(var.index('yy'))
print(var.index(True, 2, 5))
print(var.index('123'))
>>>
2
4
ValueError: '123' is not in list
  • sort:在原位置对列表进行排序,默认正序排列,sort(reverse=True)倒序排序

var = [1, 3, 123, 2, 452, 34, 53, 65, 3, 213, 42, 45, 3, 56, 21, 34]
print(var.sort())
print(var)
print(var.sort(reverse=True))
print(var)
>>>
None
[1, 2, 3, 3, 3, 21, 34, 34, 42, 45, 53, 56, 65, 123, 213, 452]
None
[452, 213, 123, 65, 56, 53, 45, 42, 34, 34, 21, 3, 3, 3, 2, 1]
  • reverse:将列表中的元素反转

var = [1, 3, 123, 2, 452, 34, 53, 65, 3, 213, 42, 45, 3, 56, 21, 34]
print(var.reverse())
print(var)
>>>
None
[34, 21, 56, 3, 45, 42, 213, 3, 65, 53, 34, 452, 2, 123, 3, 1]

列表的嵌套

var = ['liyan', 20, [1, 'yange', 2, True, ['aaa', 55], 'liyan'], 'yan', True, 'yy', 'liyan']
var[2][1] = var[2][1].upper()
print(var)
var[2][4][1] = var[2][4][1] + var[1]
print(var)
var[2][0:-1] = 'yy'
print(var)
>>>
['liyan', 20, [1, 'YANGE', 2, True, ['aaa', 55], 'liyan'], 'yan', True, 'yy', 'liyan']
['liyan', 20, [1, 'YANGE', 2, True, ['aaa', 75], 'liyan'], 'yan', True, 'yy', 'liyan']
['liyan', 20, ['y', 'y', 'liyan'], 'yan', True, 'yy', 'liyan']
  • 在列表中增加列表:

    • insert:把指定列表根据指定的下标插入到列表中
    • append:把指定列表添加到列表中的最后
    • extend:把指定列表中的元素迭代添加到列表中最后
var_insert_nesting = [1, ['yange', True, 10], 'yy', False, 'liyan']
var_insert_nesting.insert(3, [1, '111'])
print(var_insert_nesting)
var_insert_nesting.append([2, '222'])
print(var_insert_nesting)
var_insert_nesting.extend([33, '333'])
print(var_insert_nesting)
>>>
[1, ['yange', True, 10], 'yy', [1, '111'], False, 'liyan']
[1, ['yange', True, 10], 'yy', [1, '111'], False, 'liyan', [2, '222']]
[1, ['yange', True, 10], 'yy', [1, '111'], False, 'liyan', [2, '222'], 33, '333']
  • 在列表中删除列表:

    • pop:只能删除列表中的整个子列表,无法删除子列表中的元素
    • remove:只能删除列表中的整个子列表,无法删除子列表中的元素
    • clear:可以把列表中的子列表清空
    • del:可以删除列表中根据指定下标删除指定子列表中的元素
var_delete_nesting1 = [1, ['yange', True, 10], 'yy', False, 'liyan']
var_delete_nesting1.pop(1)
print(var_delete_nesting1)
var_delete_nesting2 = [1, ['yange', True, 10], 'yy', False, 'liyan']
var_delete_nesting2.remove(['yange', True, 10])
print(var_delete_nesting2)
var_delete_nesting3 = [1, ['yange', True, 10], 'yy', False, 'liyan']
var_delete_nesting3[1].clear()
print(var_delete_nesting3)
var_delete_nesting4 = [1, ['yange', True, 10], 'yy', False, 'liyan']
del var_delete_nesting4[1][2]
print(var_delete_nesting4)
>>>
[1, 'yy', False, 'liyan']
[1, 'yy', False, 'liyan']
[1, [], 'yy', False, 'liyan']
[1, ['yange', True], 'yy', False, 'liyan']
  • 在列表中修改列表:可以根据列表中的子列表的元素下标进行修改

var_update_nesting = [1, ['yange', True, 10], 'yy', False, 'liyan']
var_update_nesting[1][0] = 'liyan'
print(var_update_nesting)
>>>
[1, ['liyan', True, 10], 'yy', False, 'liyan']
  • 在列表中查询列表:可以根据列表中的子列表的元素下标进行查询

var_select_nesting = [1, ['yange', True, 10], 'yy', False, 'liyan']
print(var_select_nesting[1][2])
>>>
10

2. 元组(只读列表)

  • 元组是有序的

  • 元组表是不可变的

  • 元组只支持查询但不支持增删改等操作

  • 元组支持切片、索引、步长

  • 元组中的元素不能修改,元组中的列表是可以修改的,但是元组中的元组也是不可以修改的。

  • 元组支持嵌套使用

var = ('liyan', 20, 'yy', 'yan', True, 'yy', 'liyan')
print(var[2])
print(var[0:3])
print(var[-1:-5:-2])
var[2] = 18
print(var)
>>>
yy
('liyan', 20, 'yy')
('liyan', True)
TypeError: 'tuple' object does not support item assignment
var = ('liyan', 20, [1, 'yange', 2, True, ('aaa', 55), 'liyan'], 'yan', True, 'yy', 'liyan')
var[2][3] = False
print(var)
var[2][4][1] = 100
print(var)
>>>
('liyan', 20, [1, 'yange', 2, False, ('aaa', 55), 'liyan'], 'yan', True, 'yy', 'liyan')
TypeError: 'tuple' object does not support item assignment

3. range函数

  • range是一个数字范围

  • range中不能有非数值的数据类型

  • range遵守顾头不顾尾原则

  • range支持步长

for i in range(1, 10, 3):
    print(i)
>>>
1
4
7
posted @ 2017-10-24 16:25  _岩哥  阅读(185)  评论(0)    收藏  举报