list 相关函数
len(list) 返回列表长度
list.index("") 根据内容查找第一个元素,返回下标,找不到报错。
与字符串不同的是,list没有 find 方法。可能是因为列表本身是动态的原因。
☆ 复制,和赋值的区别
1. 列表可以通过 list.copy() 方法以及切片 list[:] 返回一个与原列表相同的列表;
2. 另外,如果把原列表赋值给一个新的变量,那么新列表也与原列表相等。
但两种方式在python解释器中的处理机制不同:
列表的值是储存在堆里,而非变量中。变量在栈里,内部存的是一个指向相应列表值在堆中的坐标(地址)。
因此,第一种方式,会在堆中开辟一块新的地方来储存。第二种是把变量的坐标(地址)给了新变量。验证两种方式的方法:改变原始列表,方法1的新列表值不变,方法2 的新列表值随之变化。
list1 = [1,2,3,4,5]
list2 = list1
list3 = list1.copy()
list4 = list1[:]
list1.append("hehe")
print(list1) >> [1,2,3,4,5,"hehe"]
print(list2) >> [1,2,3,4,5,"hehe"]
print(list3) >> [1,2,3,4,5]
print(list4) >> [1,2,3,4,5]
2. 列表的遍历
list1 = [1,2,3]
for i in list1:
print(i) >> 1\n 2\n 3\n
3. 元组tuple
用小括号括起来。类似JS数组,值不变,安全性高。
tuple1 = (1,2,3,4)
没有 增,删,改的功能。只有查:
t1 = (1,2,3)
a,b,c = t1 >> a=1,b=2,c=3
a = t1 >> 报错
a,b,c,d = t1 >> 报错
可以通过下标获得元素 tuple[i]
4. 字典 dict
用花括号括起来,内部是键值对形式,不允许重复值,可以加重复值,但无意义也不报错。
增
d = {"name":"xiaoming","age":"18"}
# d["newKey"] = value
d["sex"] = "Lady"
删
d = {"name":"xiaoming","age":"18"}
# del d["key"]
del d["name"] >> {"age":"18"}
改
与增加元素相同
查
d = {"name":"xiaoming","age":"18"}
# 1. d["key"]
print(d["name"]) >> xiaoming
# 2. d.get("key")
print(d.get("name"))
字典中排列顺序并不是按照输入顺序,它有一套自己的玩法,从而使得查询速度极快。
5. eval() 方法
将字符串转换为列表或者字典(长得像谁就转成谁)。注意转字典时,字符串的引号和字典的键值对引号要区分。
6. 小练习,分别用 list 和 dict 制作通讯录系统
list版:
name = ["中国移动","中国电信"]
phone = [10086,10000]
while True:
print('''=======通讯录管理系统=======
1.增加姓名和手机
2.删除姓名
3.修改手机
4.查询所有用户
5.根据姓名查找手机号
6.退出
============================''')
x = input("请输入:")
if x == "1":
n = input("请输入姓名:")
p = input("请输入手机:")
name.append(n)
phone.append(p)
print("增加成功!")
elif x == "2":
n = input("请输入姓名:")
try:
i = name.index(n)
except ValueError as e:
print("查无此人,返回初始界面")
else:
name.pop(i)
phone.pop(i)
print("已成功删除!")
elif x == "3":
n = input("请输入姓名:")
try:
i = name.index(n)
except ValueError as e:
print("查无此人,返回初始界面")
else:
m = input("请输入手机:")
phone[i] = m
elif x == "4":
print("所有联系人:")
for i,j in enumerate(name):
print(j, ":", phone[i])
elif x == "5":
n = input("请输入姓名:")
print(phone[name.index(n)])
elif x == "6":
print("成功退出!")
break
else:
print("输入有误,请重新输入!")
dict版:
dic = {"中国移动":10086,"中国电信":10000}
def sys(x):
if x=="1":
set(inp_name(),inp_phone())
elif x=="2":
delete(inp_name())
elif x=="3":
find(inp_name())
elif x=="4":
allUser()
else:
print("\tError!输入有误,请重新输入!")
def inp_name():
name = input("请输入姓名:")
return name
def inp_phone():
phone = input("请输入手机:")
return phone
def set(name,phone):
dic[name] = phone
print("\t已成功修改!")
return dic
def delete(name):
try:
del dic[name]
except KeyError as e:
print("\tError 查无此联系人!")
else:
print("\t已成功删除!")
return dic
def allUser():
print(dic)
def find(name):
try:
print(dic[name])
except KeyError as e:
print("\tError 查无此联系人!")
def exit():
pass
while True:
print('''>============通讯录系统===============<
请输入:
增加/修改手机号···· 输入:1
删除联系人·······输入:2
查找联系人·······输入:3
查看通讯录·······输入:4
退出通讯录·······输入:5
>====================================<''')
x = input(">")
if x=="5":
print("成功退出!")
break
sys(x)