首页 > 技术文章 > Python基础知识笔记(三)

shawnhuang 2018-12-21 15:31 原文

一. 基础数据类型

      基础数据类型有以下几种:

             整数(int)    

             字符串(str)    

             布尔值(bool)

             列表(list)

             元组(tuple)

             字典(dict)

             集合(set)

二. 整数—— int

        这里主要熟悉二进制与十进制之间的对应关系与相互转化的方法:

            1). 二进制与十进制的关系
                    

                  i = 4
                  print(i.bit_length())          # 3
                  # 获取十进制转化成二进制的有效位数

                  二进制             十进制
                  0000 0100           4
                  # 这里二进制中的 100 即是有效位数

              2). 二进制与十进制之间的转化
               

                  二进制转化成十进制
                  示例:
                  二进制 0010 1101
                  0             0             1             0             1             1             0             1
                  0*2**7 + 0*2**6 + 1*2**5 + 0*2**4 + 1*2**3 + 1*2**2 + 0*2**1 + 1*2**0
                 十进制结果就是上面这行所有乘积的和

                 十进制转化成二进制
                  方法:对2取余 逆向排列
                  比如十进制数 42
                  除法         商        余数
                  42/2         21          0
                  21/2         10          1
                  10/2         5            0
                  5/2           2           1
                  2/2           1           0
                  1/2           0           1
                  这里不够8位,直接补0即可,所以42对应的二进制(逆向排序)是 00101010
                  PS:前面的两个 0 是补上去的.

         补充:

1 a = int("    56 ")
2 b = int("56")
3 c = int(" 5   6")
4 
5 print(a)    # 56
6 print(b)    # 56
7 print(c)    # 报错

 

三. 字符串—— str

1. 字符串的索引与切片

1 # 注意:字符串的切片索引以及常用操作方法,都是形成新的字符串,与原来的字符串没有关系
2 
3 s = [1, 2, 3]
4 s1 = s[0]
5 print(s == s1)   # False

 

 1 s = "12345678"
 2 
 3 s[-2::-2]
 4 
 5 # 这种题首先看最后一个,是 -2, 即负数
 6 # 所以首尾要颠倒,即从右往左数
 7 # 再看第一个数是 -2,这里所指的是 7
 8 # 就是说从 7 开始往左执行切片操作
 9 # 然后中间没写什么,代表一直从 7 到 1 取片
10 # 最后 步长是 2, 所以结果就是 "7531"
11 
12 s[-2:-1:-1]
13 # 按照上面步骤,从 7 开始往左取片
14 # 但是 -1 指的是 8 ,8 在 7 的右边,7 往左永远与 8 没关系
15 # 因此这个的结果是 "", 即空字符串,取不到任何东西
16 
17 s[-2:7:-1]
18 # 仔细观察发现其实这个和上面的 s[-2:-1:-1]是一样的
19 # 即 7 指的也是从左往右索引号是 7 对应的值,即 8
20 
21 s[-2:0:0]
22 # 这里步长是0 ,所以不看前面就知道会报错
23  
24 s[-2:-9:-2]
25 # 结果也是 "7531"
26 # s[-2:-100:-2] 也是一样
27
28 # 另外,时刻记住一点:顾头不顾尾!

 

2. 字符串常用方法:

1). capitalize() 与 title() —— 首字母大写与所有单词的首字母大写

 

 1 s = 'alex wusir9Taibai$xiaoHu'
 2 
 3 # capitalize() — 第一个单词的首字母大写,其他单词都是小写(!!!)
 4 s3 = s.capitalize()  
 5 # Alex wusir9taibai$xiaohu
 6 
 7 # 如果该字符串的第一个字符不是字母,那么capitalize() 就没起作用了
 8 s = "7#dakj$kdjl(dkak)dka"
 9 s.capitalize()  
10 # 7#dakj$kdjl(dkak)dka
11 
12 
13 # title()— 非字母隔开的每个单词的首字母大写
14 s = 'alex wusir9Taibai$xiaoHu'
15 s4 = s.title()         
16 # Alex Wusir9Taibai$Xiaohu

2). center() —— 将字符串居中

1 s = "居中"
2 
3 s5 = s.center(20)
4 s6 = s.center(20, "*")
5 
6 print(s5)    #          居中         
7 print(s6)    # *********居中*********
8 
9 # 可以设置总长度,可以设置填充物

3). swapcase() —— 字母大小写翻转

1 s = 'TAiBai'
2 
3 s7 = s.swapcase()
4 print(s7)   # taIbAI

4). upper() 与 lower() —— 单词全部大小写

 1 s = 'taibaiJInXing'
 2 
 3 s8 = s.upper()
 4 s9 = s.lower()
 5 
 6 print(s8)    # TAIBAIJINXING
 7 print(s9)    # taibaijinxing
 8 
 9 # 这两种用法可以用在比如验证码之类
10 
11 username = input('请输入姓名:')
12 password = input('请输入密码:')
13 code = 'AeTrd'.upper()
14 your_code = input('请输入验证码:').upper()  # 这里是关键点
15 
16 if your_code == code:
17     if username == 'alex' and password == '123':
18         print('登录成功')
19     else:
20         print('用户名或者密码错误')
21 else:
22     print('验证码不正确')

5). startswith() 与 endswith() —— 判断是否以某些元素开始或结束

1 s = 'alexeaaa'
2 
3 print(s.startswith('a'))      # True
4 print(s.startswith('alex'))  #  True
5 print(s.startswith('e',2,))  #  True    # 可切片

6). find() 与 index() —— 在字符串中查找某元素是否存在及存在的位置(从0开始计数)

 1 s = 'taibaijinxing'
 2 
 3 print(s.find('a'))       # 1
 4 print(s.find('a',2,))   # 4
 5 print(s.find('X'))       # -1
 6 print(s.index('X'))     # 报错
 7 
 8 # find() —— 通过元素找索引,找到第一个就返回(可切片),找不到返回-1
 9 # index() —— 通过元素找索引,找到第一个就返回(可切片),找不到报错
10 # 通过比较可知,能用 find() 就用它,以免使用 index() 时引起不必要的报错 

7). strip() —— 默认去除字符串前后两端的空格,换行符及制表符

 1 name='*barry**'
 2 
 3 print(name.strip('*'))      # barry
 4 print(name.lstrip('*'))     # barry**
 5 print(name.rstrip('*'))     # *barry
 6 
 7 # 在程序的应用场景一般是用户对于验证码的输入
 8 # 因为验证码输入大小写都是可以的,所以程序必须判定只要内容相同,用户的输入就可以通过
 9 
10 # 应用举例:
11 username = input('请输入姓名:').strip()
12 password = input('请输入密码:').strip()
13 if username == 'alex' and password == '123':
14     print('登录成功')
15 else:
16     print('用户名或者密码错误')
17
18 以后用 input()用法时后面一定要加个 .strip()

8). split() —— 以某条件分割,最终形成一个不含有这个分割符的元素的列表

                     (字符串转化为列表的方法)

 1 # 默认以空格分割
 2 
 3 s = 'wusir alex taibai'
 4 ss = 'wusir:alex:taibai'
 5 sss = 'taibai:alex:wusir:xiaohu:日天'
 6 ssss = ':wusir:alex:taibai'
 7 
 8 s10 = s.split()               # ['wusir', 'alex', 'taibai']
 9 s11 = ss.split(":")          # ['wusir', 'alex', 'taibai']
10 s12 = sss.split(":", 1)     # ['taibai', 'alex:wusir:xiaohu:日天']
11 s13 = ssss.split(":")       # ['', 'wusir', 'alex', 'taibai']
12 
13 # 由 s13 可知分割出的元素要比分隔符数+1
14 # rspilt()—— 从右到左分割
15 s = "alex wusir ritian"
16 print(s.split(" ", 1)) # ["alex", "wusir ritian"]
17 print(s.rsplit(" ", 1)) # ["alex wusir", "ritian"]
18 # 注意看结果对比
19
20 # 注意使用 split()默认以空格分隔 与 split(" ")(里面一个空格)的区别
21 s = "alex taibai"
22 print(s.split()) # ['alex', 'taibai']
23 print(s.split(" ")) # ['alex', '', '', 'taibai']
24 # 可以看出,split() 使用默认方式会把元素之间的所有空格当成一个空格来分割
25 # 而如果在括号里指定以多少个空格来分割的话就会出现问题

 9). join()

 1 # 这种方法可以用于 列表转变成字符串 
 2 # 条件是必须全部都是字符串组成的列表
 3 
 4 s = ['wusir', 'alex', 'taibai']
 5 ss = 'alex'
 6 s14 = "_".join(ss)
 7 s15 = " ".join(s)
 8 
 9 print(s14)    # a_l_e_x
10 print(s15)    # wusir alex taibai

10). replace()

1 s = 'Alex 是老男孩的创始人之一,Alex也是一个屌丝,Alex'
2 s11 = s.replace('Alex', '日天', 1)
3 
4 print(s11)   # 日天 是老男孩的创始人之一,Alex也是一个屌丝,Alex

11). format 格式化输出

 1 # 第一种方式:
 2 
 3 s = '我叫{}, 今年{}, 性别{}'.format('小虎', 25, '')
 4 print(s)    # 我叫小虎, 今年25, 性别女
 5 
 6 # 第二种方式
 7 # 注意这里的用法
 8 
 9 s = '我叫{0}, 今年{1}, 性别{2},我依然叫{0}'.format('小虎', 25, '')
10 print(s)    # 我叫小虎, 今年25, 性别女,我依然叫小虎
11 
12 # 第三种方式
13 s = '我叫{name}, 今年{age}, 性别{sex},我依然叫{name}'.format(age=25, sex='',name='小虎',)
14 
15 print(s)    # 我叫小虎, 今年25, 性别女,我依然叫小虎

12). is 系列

 1 name = 'taibai123'
 2 print(name.isalnum()) #字符串由字母或数字组成    # True
 3 print(name.isalpha()) #字符串只由字母组成          # False
 4 print(name.isdigit()) # 字符串只由数字组成           # False
 5 
 6 # 注意在这里的用法
 7 # 比如购物后付钱,要用户输入前,如果不小心输入"1000a",会报错,可以这样:
 8 money = input('>>>')
 9 if money.isdigit():
10     money = int(money)
11
12 # 这里注意很奇怪的一点:
13 is.alpha() 这个用法只要是字母,中文,外文都是 True!!!

13). count() —— 计算字符串中某个字符出现的次数

 1 s = 'fjdsklf;jdskafjdsaflsdfsdfsdafsdgsfda'
 2 
 3 print(s.count('f'))        # 8
 4 print(s.count('f',1,))     # 7
 5 
 6 # 在 name = "Alex lxnb" 这个变量中,如何判断这个变量的前四位字母中关于 "l" 出现的次数?
 7 # 方法一:
 8 n = name[:4]
 9 print(n.count("l"))  # 1
10 
11 # 方法二:
12 # 要算出现几次,首先想到 count 方法
13 # 然后在 Pycharm 中输入 "count" 选中它,按 Ctrl 键,点击这个单词
14 # 这时会跳出一个 py 文件,专门介绍 count 用法,然后发现可以这样:
15 print(name.count("l", 0, 4)  # 1

14). len()

 1 s = 'fdskafl12431   fdkslfjsdlfksjd'
 2 
 3 print(len(s))    # 30
 4 
 5 # 延申用法
 6 s = "jasdjlk"
 7 num1 = 0
 8 while 1:
 9     print(s[num1])
10     num1 = num1 + 1
11     if num1 == len(s):
12         break

15). 列表嵌套的一个小技巧

1 li = [1, 2, 3, [44, 55], 66]
2 
3 for i in li:
4     if type(i) == list:
5         for j in i:
6             print(j)
7     else:
8         print(i)

 

# 把下面列表中66之前的数放到字典的键key1对应的值的列表中,把之后的数放到key2对应的值的列表中
# 前提条件:前三行不能变
# li = [11, 22, 33, 44, 55, 77, 88, 99]
# dic = {}
# for i in li:

li = [11, 22, 33, 44, 55, 77, 88, 99]
dic = {}
for i in li:
    if i < 66:
        if "key1" not in dic:
            dic["key1"] = [i]
        else:
            dic["key1"].append(i)
    else:
        if "key2" not in dic:
            dic["key2"] = [i]
        else:
            dic["key2"].append(i)
print(dic)
# {'key1': [11, 22, 33, 44, 55], 'key2': [77, 88, 99]}

# 还可以这样:li = [11, 22, 33, 44, 55, 77, 88, 99]dic = {}for i in li:    if i < 66:        if "key1" not in dic:            dic["key1"] = []        dic["key1"].append(i)    else:        if "key2" not in dic:            dic["key2"] = []        dic["key2"].append(i)
print(dic)

 

推荐阅读