列表基本操作&内置方法

列表基本操作

列"表"来了

列表内一般都会存储相同数据类型的数据

  • list的类型转换
    数据类型关键字(需要转换的数据)
print(list(123))  # 报错
print(list(123.22))  # 报错
print(list('hello'))  # ['h','e','l','l','o']
print(list({'username':'jason', 'pwd':123}))  # ['username', 'pwd']
# 只有key在列表当中

print(list((11, 22, 33)))  # [11,22,33]
print(list({11,22,33}))  # [33,11,22] 无序

# list关键字可以将支持for循环的数据类型转换成列表

列表内置方法

name_list = ['jason', 'jack', 'tony', 'duke']
print(name_list[1:3])  # 切片 ['jack', 'tony']
print(name_list[0:4:2])  # 步长 ['jason', 'tony']
print(name_list[-1:-4:-1])  # 反向切片 ['duke', 'tony', 'jack']

# 统计列表中元素的个数
print(len(name_list))  # 4

必须掌握的

  1. 增、改
1.修改值
name_list[0] = 'alvin'

2.添加值
# 1. append尾部追加元素(括号内的数据当成一个整体追加到列表末尾,)
name_list.append('追加的')

# 2. insert插入元素(括号内的数据当成一个整体插入到指定位置,)
name_list.insert(0, '插入的')

# 3. extend扩展元素(底层相当于for循环+append)
name_list.extend([111,222,333,444])
  1. 删除
方式一:del通用的删除方式根据索引直接删除
name_list = ['jason', 'jack', 'tony', 'duke']
del name_list[1]

方式二:remove()括号内指定需要移除的元素
name_list.remove('jason')

方式三:pop()弹出的值可以取到。
del_word = name_list.pop(1)  # 根据索引弹出,弹出的值可以取到
print(del_word)  # jack
name_list.pop()   # 不写参数默认弹出尾部参数


可变类型与不可变类型

可变类型:值改变 内存地址不变,修改的是原值

# 测试 集合
set1 = {1, 2, 3, 4}
print(id(set1), type(set1), set1)
set1.add(88)
print(id(set1), type(set1), set1)
"""
1637988509728 <class 'set'> {1, 2, 3, 4}
1637988509728 <class 'set'> {1, 2, 3, 4, 88}
"""
# 测试列表
lis1 = [1, 2, 3, 4]
print(id(lis1), type(lis1), lis1)
lis1.append(88)
print(id(lis1), type(lis1), lis1)
"""
2169931235008 <class 'list'> [1, 2, 3, 4]
2169931235008 <class 'list'> [1, 2, 3, 4, 88]
"""
以此类推,测试元组,
tup1 = (1, 2, 3, 4, [12, 34, 56])
print(id(tup1), type(tup1), tup1)
tup1[4].append(888)
print(id(tup1), type(tup1), tup1)
"""
2528056840816 <class 'tuple'> (1, 2, 3, 4, [12, 34, 56])
2528056840816 <class 'tuple'> (1, 2, 3, 4, [12, 34, 56, 888])
但是我们不能以此说明元组是可变类型,元组的定义就是不可变的,我们修改了元组中列表的值,
但是因为列表是可变数据类型,所以虽然在列表中更改了值,但是列表的地址没有改变,列表在元组中的地址的值也就没有改变,
所以也就意味着元组没有发生变化。我们就可以认为元组是不可变数据类型,因为元组是不可变的。
"""

# 测试字典时,也会发现
tuple = (1)
d = { tuple:1,'key2':'djx','key3':'li'}
print(d,type(d),id(d))
d['key4'] = 'haha'
print(d,type(d),id(d))
"""
{<class 'tuple'>: 1, 'key2': 'djx', 'key3': 'li'} <class 'dict'> 2322053173952
{<class 'tuple'>: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 2322053173952
"""

据此我们可以知道:列表,集合,字典,是可变数据类型

不可变类型:值改变 内存地址肯定变,产生了新值
字符串,整型,浮点型,元组,是不可变数据类型

队列与堆栈 作业!!

队列:FIFO 先进先出first in first out
堆栈:FILO 先进后出(叠衣服)
用列表及内置方法,模拟出上述两个数据结构的特性
放几个数,取几个数,模拟队列/堆栈的特性实现。

# 定义一个存放名字的空列表
name_list = []
while True:
    name = input('请输入您的名字(q/Q退出)>>>:').strip()
    if name.upper() == 'Q':
        break
    # 向列表中追加输入的名字
    name_list.append(name)

# 队列取值,直接for循环实现,先进先出
for i in name_list:
    print(i)

# 堆栈取值,用步长实现列表倒叙取值,实现先进后出
for j in range(len(name_list)-1, -1, -1):
    print(name_list[j])

# 直接通过索引取值,实现列表翻转输出,先进后出
for k in name_list[::-1]:
    print(k)

列表内置方法补充在这里

排序

# 1.sort
l1 = [44,22,88,42,99,11,33,66]
# l1.sort()  # 列表排序,默认是升序
print(l1)  # [11, 22, 33, 42, 44, 66, 88, 99]

# l1.sort(reverse=True)  # 改为降序排列
print(l1)  # [99, 88, 66, 44, 42, 33, 22, 11]

# 2.reverse
# l1.reverse()  将原列表顺序颠倒
print(l1)  # [66, 33, 11, 99, 42, 88, 22, 44]

# l1.clear()  清空列表

比较运算

# 列表比较运算采用相同索引元素比较,只要有一个比出了结果,就直接得出结论

l1 = [99,33,11,44]
l2 = [11,22,33]
print(l1 > l2)  # True

# 字符串比较大小也是按照索引位置内部转成ASCII码对应的数字比较
s1 = 'hello world'
s2 = 'abc'
print(s1 > s2)  # True

posted @ 2021-11-08 17:15  Joshua_jiaxue  阅读(131)  评论(0编辑  收藏  举报