Python 学习 ,数据结构

87 阅读6分钟

一、字符串

'''
  字符串
'''
str1 = "单引号"
str2 = "双引号"
str3 = """
    三引号
    可以换行
"""
print(str1)
print(str2)
print(str3)

# 字符串截取 与PHP 的 substr()相似
substr = "这是一句很牛逼的话"
print(substr[0])
print(substr[0:2])
print(substr[0:9:2]) #[哪个数字开始 : 哪个数字结束 : 步进值]
print(substr[5:])
print(substr[:5])
print(substr + '真的哦')  # 字符串拼接
print('-' * 30)  # 显示30个-
print("hello\nword")  # 使用反斜杠实现转义的功能
print(r"hello\nword")  # 在字符串前面加r,表示直接显示,不进行转义

二、列表

'''
列表
'''


#
namelist = ['张三','李四',3,5]  #定义一个列表
print(len(namelist))  # 获取列表的长度 与PHP的count相似

for value in namelist:  # 遍历列表
    print(value)

'''
增
append 在列表末尾追加一个元素 与PHP的array_push相似(注意这里还能追加一个列表)
extend  一个一个合并与PHP中的array_merge相似
insert namelist.insert(下标,元素值) 指定下标位子插入元素
'''
namelist.append('王麻子')  # 在列表末尾追加一个元素 与PHP的array_push相似(注意这里还能追加一个列表)
list = ['土匪','强盗']

namelist.append(list)   # ['张三', '李四', 3, 5, '王麻子', ['土匪', '强盗']]
print(namelist)


namelist.extend(list)    #['张三', '李四', 3, 5, '王麻子', '土匪', '强盗']   一个一个合并与PHP中的array_merge相似
print(namelist)


namelist.insert(1,4)   #['张三', 4, '李四', 3, 5, '王麻子']  namelist.insert(下标,元素值) 指定下标位子插入元素
print(namelist)


mylist = ['a','b','c','d']
for i,x in enumerate(mylist):  # 0-a 1-b 2-c 3-d enumerate函数将列表转为枚举,可以同时拿到列表中的下标和元素
    print(str(i) +'-'+ str(x))

'''
删
del 指定一个下标位子删除
pop 弹出下标的最后一个值
remove 删除指定的值 如果有重复数据,会先删除第一个重复值
'''

delete_list = ['路飞','索隆','山治','娜美','乔巴','乌索普','黑胡子','凯多']

del delete_list[7] #['路飞', '索隆', '山治', '娜美', '乔巴', '乌索普', '黑胡子'] 指定一个下标位子删除
print(delete_list)

delete_list.pop()  #['路飞', '索隆', '山治', '娜美', '乔巴', '乌索普', '黑胡子']  弹出下标的最后一个值
print(delete_list)

delete_list.remove('黑胡子') # ['路飞', '索隆', '山治', '娜美', '乔巴', '乌索普', '凯多'] 删除指定的值 如果有重复数据,会先删除第一个重复值
print(delete_list)

'''
改
直接指定下标修改
'''

update_list = ['哥老关','地头蛇','长老关','不得了','洋盘得很']

update_list[1] = '墙头草'  # ['哥老关', '墙头草', '长老关', '不得了', '洋盘得很'] 直接指定下标修改
print(update_list)

'''
查
in
not in
'''

index_list = ['你看看你','一天天的','不得了的很','无敌是多么寂寞']

find = '可以哦'

find2 = '一天天的'

if find in index_list:  # not in 与这个用法一样
    print('在里面')
else:
    print('不在里面')

index = index_list.index('一天天的',0,2)  # 1 可以查找指定元素在莫个区间是否存在,从多少下标开始,到多少长度结束,有就返回下标,没有就是报错
print(index)
index = index_list.index('一天天', 0, len(index_list)) #报错
print(index)

count = index_list.count('一天天的') # 1 返回指定元素的数量
print(count)

num_list = [1,3,5,4,8,6,2]
num_list.reverse() # [2, 6, 8, 4, 5, 3, 1] 将列表元素反转
print(num_list)

num_list.sort()  # [1, 2, 3, 4, 5, 6, 8] 列表从小到大排序
print(num_list)

num_list.sort(reverse=True)  #[8, 6, 5, 4, 3, 2, 1] 降序
print(num_list)

name_lists = [[],[],[],[]]
name_list = ['骨王','安兹乌尔恭','史莱姆','路飞','唐三','小舞','石昊','火灵儿']

import random
for list in name_list:
    index = random.randint(0,3)
    name_lists[index].append(list)

i = 1
for name in name_lists:
    print('第%d个位子有%d个人物'%(i,len(name)))
    i += 1
    for user in name:
        print('%s'%user,end='\t')
    print('\n')
    print('-'*30)

# 打印结果
# 第1个位子有2个人物
# 骨王   石昊
#
# ------------------------------
# 第2个位子有2个人物
# 史莱姆  小舞
#
# ------------------------------
# 第3个位子有2个人物
# 安兹乌尔恭    唐三
#
# ------------------------------
# 第4个位子有2个人物
# 路飞   火灵儿
#
# ------------------------------

#需求1按下面需求输出
products = [['iphone',6888],['MacPro',14800],['小米6',14546],['IQOO',4500],['红米',6300]]

print('-'*6 + '  商品列表  '+ '-'*6,end='\n')

index = 0
for product in products:
        print('%d  %s  %d'%(index,product[0],product[1]))
        index += 1

# ------  商品列表  ------
# 0  iphone  6888
# 1  MacPro  14800
# 2  小米6  14546
# 3  IQOO  4500
# 4  红米  6300

#需求2 根据上面的products列表写一个循环,不断询问对方想买什么,用户选择一个商品编号,就把对应的商品加入购物车,最终用户输入q时,打印出购买的商品列表


carts = []
while True:
    a = input('请输出你要买的商品商品编号')
    if a == 'q':
        break
    elif a == '' or (int(a) not in [0,1,2,3,4]):
        print('商品编号不存在,请重新输入!')
        continue
    else:
        carts.append(products[int(a)][0] +'-'+ str(products[int(a)][1]))

print('-'*6 + '  购买商品列表  '+ '-'*6,end='\n')
pay = []
if len(carts) > 0:
    for cart in carts:
        if cart not in pay:
            value = cart.split('-',1)
            print('%s   *%d    %s'%(value[0],carts.count(cart),(int(value[1]) * carts.count(cart))))
            pay.append(cart)
else:
    print('暂无购物商品商品')

# ------  购买商品列表  ------
# MacPro   *2    29600
# 小米6   *2    29092
# IQOO   *1    4500
# iphone   *3    20664

三、元组

'''
Tuple(元组) 
Python的核心数据类型
tuple与list类似,不同之处在于tuple的元素不能修改,tuple写在小括号里,元素之间用逗号隔开
元组的元素不可变,但可以包含可变的对象如list
注意:定义一个只有1个元素的tuple,必须教逗号
'''

tup1 = (50,)  #加逗号才是元组,当只有一个元素时去掉这个逗号就不是元组了,必须加上这个逗号
tup = (10,20,30,42,50)
print(tup[0:4]) #(10, 20, 30, 42)

# 增

tup1 = (10,60,80)
tup2 = ('aaa','张三')
tup = tup1 + tup2  #(10, 60, 80, 'aaa', '张三')
print(tup)

#删
tup1 = (10,60,80)
del tup1  # 这里删除直接把变量都给你删除了一定要记住,所以下面打印就会报错
# print(tup1)  # 这里会报错


#改 元组不允许修改

四、字典

'''
dict(字典)
字典是无序的对象集合,使用键-值(key-value) 存储,具有极快的查找速度
键(key)必须使用不可变类型
同一个字典中,key必须是唯一的
'''

dict = {
    'name': '张三',
    'age': 24
}
print(dict['name'])  #张三
# print(dict['sex'])  # 直接访问会报错,因为不存在该键
print(dict.get('sex')) #None 使get方法,没有找到对应的值,默认返回:None
print(dict.get('sex','1')) # 1 如果字典存在就返回原值,否则返回1


#增
id = 1
dict['id'] = id
print(dict) # {'name': '张三', 'age': 24, 'id': 1}

#删

del dict['age']
print(dict)  # {'name': '张三'} 删除字典的age

del dict
print(dict) #<class 'dict'> 删除所有的字典

dict.clear()
print(dict)  #{} 清空字典

#改
dict['age'] = 25
print(dict) #{'name': '张三', 'age': 25}


#查
keys = dict.keys()  # dict_keys(['name', 'age']) 得到所有的键(列表)
print(keys)
values = dict.values()  # dict_values(['张三', 25]) 得到所有的值(列表)
print(values)
items = dict.items()  # dict_items([('name', '张三'), ('age', 25)]) 得到所有的项(列表),每个键值都是一个元组
print(items)

for key in dict.keys():
    print(key)   # name age 遍历所有的键


for value in dict.values():
    print(value)   # 张三  25 遍历所有的值

for key,value in dict.items():
    print(key +'-'+ str(value))   # name-张三 age-25 遍历所有的键值对 与php 的 foreach遍历数组一个效果

五、集合

'''
set(集合)
'''

set = set([1,2,3,4])  # 值不能重复
print(set)  # {1, 2, 3}

新手学习请勿喷!

欢迎各位小伙伴来我的QQ交流群一起学习 :842167453