python学习笔记(二)

一、python的数据类型:

  int整型

  float 小数类型

  string 字符串类型 

  布尔类型:True、False

可变变量:里面的元素可以随便修改

   比如:list

不可变变量:里面的元素不能修改

  比如:string、tuple

s = 'haso'
s[2]='小黑'  #报错,字符串不能通过下标修改值
s = '小黑'  #重新赋值

比较运算符:

  <  >  ==   <=    >=   !=     #返回True / False

 

二、列表(也叫:list、数组、array):

  通过索引(下标、角标、编号)来取值,比string方便

       newlist = [1,2,3,4]   #最前面一个元素下标是0,最后一个元素下标是-1

列表根据列表中元素的编号来取元素:

print(newstus[1])   #取第2个元素
print(newstus[-1])  #取最后一个元素

 

三、list小练习

# 校验用户名是否合法:
    # 输入账号       #input
    # 如果账号存在的,提示已经被注册,如果不存在的,就让他注册 all_users[]
    #不能为空          #strip()
    #用户名长度长度6-12之间 len()
    #最多输入3次     #循环

all_users =  ['zhangsan','wangwu','zhangwifi']
for i in range(3):
    username = input('请输入账号:').strip()
    if len(username)>5 and len(username)<13:
        if all_users.count(username)>0:
            print('这个名字太好啦,已经被注册啦!')
        else:
            print('名字不错,赶紧注册吧!')
            break
    else:
        print('用户名长度不合法!长度6-12之间!')
else:
    print('失败次数过多')

四、列表的方法:

  1)增:

  cities = []     #定义一个空列表

  ①在列表末尾添加一个元素,一次只能添加一个元素  

cities.append('北京') 

  ②在指定位置,接受两个参数(索引号、新元素的值),增加元素

cities.insert(0, '上海')  #在第一个位置增加元素 

  ③extend()方法:接收一个参数如果参数是列表或字符串,就将该参数中的每个元素分别添加到原有的列表中

cities = ['北京','上海']
cities.extend(['成都','深圳'])
cities.extend('abc')
print(cities)

  >>> ['北京', '上海', '成都', '深圳', 'a', 'b', 'c']

 

  2)删:

  ①删除指定位置的元素(不指定位置,默认删最后一个)

cities.pop(-1)

  ②指定元素的名字来删除

cities.remove('北京')

  ③清空list

cities.clear()

  ④删除指定位置的元素

del cities[-1]

  

  3)修改:通过下标修改元素的值

 cities[1] = '南京'    ##修改的时候如果指定的下标不存在,会报错

  4) 查:通过下标取值

print(cities[0])             #获取指定位置的值
print(cities.index('广州'))   #获取某个元素的下标
print(cities.count('广州'))   #查看/统计元素在list里面出现了多少次

  5)翻转list

my_list = ['python','jmeter','charles','postman']
print(my_list.reverse())  #就是把这个list反转一下,返回None
print(my_list)    #打印翻转后的list

  6)list排序

nums = [111, 33, 5, 8, 99]  #或者num=['b','v','f']

nums.sort()   #默认升序,返回None  #>>> [5, 8, 33, 99, 111]nums.sort(reverse=True)  #降序,返回None
print(nums)    #打印排序后list

   7)合并list

print(list1+list2)   #合并list

print(list1 * 2)   #复制几遍list

   8)计算字符串或list长度

words = '广州'
print(len(words))

  >>> 2

五、多维数组:

list1 = [1,2,3,4] #一个普通的数组
list2 = ['marry','lily',[50,'monkey']] #二维数组
list3 = ['name','sex',['lily',124,['aaaa','bbb']]] #三维数组

  【例】 :多维数组的取值

names=[  ['小黑',['小绿',138]],'小红',['小紫',['小白']]]
print(names[-1][-1])   #['小白']
print(names[0][-1][-1])   

六、list的切片:切片是list取值的一种方式

num = ['aaa','bbb','ccc','ddd']
#下标:   0     1    2     3
print(num[:])   #取所有的元素

print(num[1:3])  #顾头不顾尾,不包含右边下标的元素 #>>> [‘bbb’,’ccc’]
print(num[1:])   #从头开始到某个下标结束,开头的下标可以不写
print(num[:2])   #从开头开始取,取到某个下标结束,开头的下标可不写

    list以步长方式切片:   

 #如果步长是正数,从左往右开始取
 #如果步长是负数,从右边开始取值
num = list(range(1,21))
print(num)   #>>>[1,2,3....20]
print(num[::2]) #步长,隔几个取一次 >>>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(num[::-2]) #步长,隔几个取一次  >>>[20, 18, 16, 14, 12, 10, 8, 6, 4, 2]
print(num[0:10:2])  #步长(默认是1) >>>[1, 3, 5, 7, 9]
print(num[::-1])   #反转list  >>>[20, 19, ... 2, 1]

七、切片方式反转与rever反转的区别:

  #list1.reverse()  # reverse反转,改变了原来list的值

  #list1[::-1]          #切片方式反转,不会改变原来list的值

切片操作同样适合字符串(字符串不能通过下标修改值)

s = 'haso'
print(s[0])
print(s[:3])

八、list循环:

lists = ['aaa','xiaoming',[1,2,3,4],'小黑']

for i in lists:
    print(i)

  >>> aaa

    xiaoming
    [1, 2, 3, 4]
    小黑

for i in range(4):  #其它语言的遍历循环

  print(lists[i])

     

九、string的循环:

str = 'a,xiaoming'
for i in str:
    print(i)    

#for循环在循环可迭代对象时,每次循环的是里面的每一个元素

 

十、判断一个变量的数据类型:type()

lists = ['a','xiaoming',[1,2,3,4]]
for x in lists:
    if type(x)==list:  #type()==str,int,float,list
        for i in x:
            print(i)
    print(x)

十一、list小练习

stus=[                              
      ['小明','未交'],
      ['小白','已交'],
      ['小紫','已交'],
      ['小红','未交'],
      ['小绿','未交'],
      ['小黄','未交'],
      ['小黑','已交']
    ]     #二维数组
pass_list = [ ] #所有已经交作业的同学
fail_list = [ ] #没有交作业同学的名字
for stu in stus:
    status = stu[1] #状态
    name = stu[0] #名字
    if status == '未交':
        fail_list.append(name)
    else:
        pass_list.append(name)
print('未交作业的所有同学是 %s ,总共有 %s 个人'%(fail_list,len(fail_list)))
print('已交作业的所有同学是 %s ,总共有 %s 个人'%(pass_list,len(pass_list)))

输出:

未交作业的所有同学是 ['小明', '小红', '小绿', '小黄'] ,总共有 4 个人
已交作业的所有同学是 ['小白', '小紫', '小黑'] ,总共有 3 个人

十二、元组tuple:元组也是一个list,它和list的区别是元组里面的元素无法修改

    t = (1,2,3,4,5)

 #如果元组里面只有一个元素,必须在最后加一个逗号,

word = (1)  #int类型
w = ('abc') #str类型

word = (1,)  #元组
w = ('abc',)  #元组

  1)元组的方法:

t.index('abc')  #找到元组中元素’abc’的下标

t.count('abc')  #找到元组中’abc’的个数

十三、循环删list需要注意的一个问题:

#循环删list里面的数据的时候,结果会不正确

lista = [1,1,2,3,4,5,6,8]
for i in lista:
    if i%2 != 0:
        lista.remove(i)   #期望删除奇数,保留偶数
print(lista)

>>> [1, 2, 4, 6, 8]  #但实际上第二个1也是奇数,但没有被删除

解释:

lista = [1, 1, 3, 4, 6, 8]
#       0  1   2  3  4  5  #第一次循环,删下标为0的,lista[0]=1
lista = [1, 3, 4, 6, 8]
#       0  1   2  3  4  #第二次循环,删下标为1的,lista[1]=3,所以跨过了lista[0]=1,所有这个重复的1被保留了

解决:

lista = [1, 1, 3, 4, 6, 8]
copy_list = [1, 1, 3, 4, 6, 8] #定义两个list(内存地址不一样) 
for i in copy_list:   #循环的是copy_list,它里面的元素一直没变
    if i%2 != 0:
        lista.remove(i)  #然后删除的是原list中的元素
print(lista)

十四、深拷贝和浅拷贝:

#深拷贝内存地址不一样,浅拷贝指向同一块内存地址 

import copy   #copy模块

l = [1, 1, 3, 4, 6, 8]
l2 = copy.deepcopy(l)   #深拷贝,内存地址不一样
l3 = l   #浅拷贝,指向同一块内存地址
l4 = [1, 1, 3, 4, 6, 8]
print('l :%d
l2:%d
l3:%d
l4:%d' % (id(l),id(l2),id(l3),id(l4)))

l :23849520  #内存地址一样 

l2:24511472 

l3:23849520  #浅拷贝,一样

l4:24511712

十五、判断的方法:非空即真,非0即真 #不为空true,空false ;非0true,0false

a = []  #空列表,false

b = {}  #空字典,false

c = 0   #false

d = tuple()   #空元组,false

e = ''   # 空字符串,false

print(bool(a))  #省去了判断这步
name = input("输入你的姓名:").strip()
if name:    #节省代码,以前是这样判段的是否为空name==''或者len(name)>0
    print("输入正确")
else:
    print("输入不能为空")
a = 'qqq'
b = 'ggg'
c = 'xxx'
d = 'sss'
l = [a,b,c,d]
 
原文地址:https://www.cnblogs.com/chenhongl/p/8735609.html