Python实训day02am【列表、字符串、字符集】

目录

1、列表

2、字符串

3、字符集

4、练习题


基础提升(常用操作):

  1. list集合操作 (切片)
  2. str字符串操作 
  3. dict字典操作
  4. 函数的定义

对照java,回顾java中的内容(java的基本功增强)

1、列表

# list 切片
# 从list中截取某一部分  
a = [1, 2, 3, 4, 5, 6, 7, 8];

print(a[1:3]);  # [2, 3] 包头不包尾,从下标1截取到下标3
print(a[1:]);  # [2, 3, 4, 5, 6, 7, 8] 截取到最后【去掉第一个元素】
print(a[:-1]);  # [1, 2, 3, 4, 5, 6, 7] 从头,截取到最后一个,但是不包含最后一个【去掉最后一个元素】
print(a[1:-1]);  # [2, 3, 4, 5, 6, 7] 去头尾
print(a[:]);  # [1, 2, 3, 4, 5, 6, 7, 8] 一份拷贝,相当于a.copy()

# 从后向前切,[87654321]
print(a[-1:1])  # [] 空,不支持这样写来从后向前切的
print(a[-1:1:-1])  # [8, 7, 6, 5, 4, 3] 三个位置,最后一个弄一个负数,表示从后往前切
print(a[::-1]);  # [8, 7, 6, 5, 4, 3, 2, 1] 实现倒序
print(a[::-2]);  # [8, 6, 4, 2],语法很灵活
print(a[::2]);  # [1, 3, 5, 7]

2、字符串

问,Java中的List或Array有没有截取呢?
#List有,subList,从某个位置截取到另一个位置
ls.subList(0,3); 截取0-3
#Array有,copyOf,从头截取,截取n个长度
Arrays.copyOf(sa,10); 截取sa的前10个元素

# 字符串也有切片,截取字符串的某个部分,使用和list是一样的。

s = "123456789abcdefg";
print(s[1:3])  # 23
print(s[1:-1])  # 23456789abcdef
print(s[-1:1:-1])  # gfedcba9876543
print(s[:-1])  # 123456789abcdef
print(s[1:])  # 23456789abcdefg

#java中的字符串有截取吗?
    s.substring(1); #从1到末尾
    s.substring(1,10); #从1到10,不包含10
    
#js中字符串有截取吗?有:substr、substring。(基本功是否扎实)

对照java,字符串会有:截取、替换、分割、大小写转换、查找、去空格等操作,我们可以通过dir函数,来看有哪些函数可以调用,对照功能即可。
print(dir(""))
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

a = "abcdefg 123456"
print(a.capitalize()) # Abcdefg 123456
print(a.center(66)); #                           abcdefg 123456                          
#小尝试自己完成

3、字符集

# 切片截取
# 分割
a = "abcdefg 123456"
b = a.split(" ");  # 使用空格分割
print(b)  # ['abcdefg', '123456']

# c = a.split(""); # python不支持,报错
# java: ["a","b","c","d"......"5","6"]
# print(c)
# python
# 内置函数list,将字符串转为list
c = list(a);
print(c)  # ['a', 'b', 'c', 'd', 'e', 'f', 'g', ' ', '1', '2', '3', '4', '5', '6']

# 计数
print(a.count("a"));  # 1

# 编码  encode
a = "我";
e1 = a.encode();  # 将a,通过默认编码(utf-8)后,得到的字节序列
print(e1);  # b'\xe6\x88\x91'

#  byte:字节; 整体为一个字节序列
#  1个汉字,通过utf-8编码后,得到3个字节
e2 = a.encode('gbk');  # 将a,通过gbk后,得到的字节序列
print(e2);  # b'\xce\xd2'
# 一个汉字通过gbk编码,得到两个字节

acsii码 ----》ISO8859-1  单字节 (8位),只支持256个字符
GBK码表---》GBK编码---》1字节(ascii中的英文字符)或 两字节 (中日韩的文字)    2w+
Unicode码表----》utf-8编码 ---》变长(1-6字节不等) (英文字符1个字节,汉字大多是3个字节)  14w+ (应用最广泛,utf-8)

编码有什么作用?
计算机只能存数字(0,1这样的二进制),那么对于文字语言符号等这些内容,该如何在计算机中表示呢

编码/码表 !
文字符号《-----码表-----》数字
通过码表,就可以完成数字和文字符号的互相转换

文字符号---编码/encode----》数字
文字符号《------解码/decode---------数字

当我们存数据、传输数据时,都需要将字符通过编码转换成数字,才能进行传输;
读取数据,或接收数据时,再通过解码,还原展示原本的文字符号

(观察一个txt文本文档的占用空间)
uf = b'\xe6\x88\x91'
gb = b'\xce\xd2';

print(uf.decode());# 默认utf-8解码 我
print(gb.decode('gbk')) # 我

java中有没有类似的encode和decode的转换?
    字符串--getBytes(编码)-->字节
    字节---new String(数组,编码)--->字符串

 字符串和数字互相转换
    -java字符串和数字不能直接转,需要通过插入,
        数字---char---string
         (参照的是unicode码表)
        String str = "";
        Random r = new Random();
        for(int i=0;i<10;i++) {
            str = str+ (char)(r.nextInt(26)+65);
        }
        System.out.println(str);
    
    -python没有char类型,单个字符串,就好像表示char一样
        有两个内置函数可以使用
        (参照的是unicode码表)
        chr :数字---》字符
        ord:字符-》数字

4、练习题

# 请生成长度为10的字符串,内容为随机的26个字母(A-Z)
import random

s = "";
for i in range(10):
    s = s + chr(random.randint(65, 90));

print(s);

习题1:

#生成100次0~9范围的整数
#将这些数字合并成一个大的字符串,打印出来
#统计这些数字中,每个数字出现多少次(例如,有几个0,几个1,几个2。。。。),打印出来
#找出出现次数最多的是哪个数字。

import random

s = "";
time = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for i in range(100):
    number = random.randint(0, 9);
    time[number] += 1;
    s += str(number);
print("数字0-9出现的次数分别为:", end="")
for i in time:
    print(i, end="、")
print("\n" + s)

习题2:打印emoji字符表。

for i in range(0x1f600, 0x1f64f):
    print(chr(i), i, end=" ")
    if i % 10 == 0:
        print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upward337

谢谢老板~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值