Python基础 - 05字符串列表

Python基础 - 05字符串列表 

一、字符串

1.1 字符串的格式

双引号或单引号中的数据,就是字符串,

使用一对引号来定义字符串,当出现符号冲突时可以使用转义字符,

使用三个单引号、双引号定义的字符串可以包含任意文本。

# 转义字符
print('haha\nhaha')              # 换行
print('haha\thaha')              # haha     haha
print('haha\\haha')              # haha\haha
print('haha\'hehehe\'haha')      # haha'hehehe'haha
print("haha\"h")                 # haha"h

 

Unicode的崛起
在20世纪60年代到80年代,最流行的字符编码方案是ASCII(美国信息交换标准编码)。
ASCII 比 Unicode 简单得多,但只能表示256个字符。对英语、法语和其他几种类似的语言而言,这足够了。
Unicode提供了一个大得多的字符编码集。

出于方便考虑,Unicode的前256个字母为ASCII码,如果只处理英文字符,几乎不用考虑Unicode的细节。

print(ord('a'))  # 97
print(ord('b'))  # 98
print(ord('A'))  # 65
print(chr(66))   # B
print(chr(99))   # c

 

s1 = 'hello'
s2 = s1
s3 = 'hello'
print(s1, s2, s3)     # hello hello hello
print(id(s1))         # 16035697648
print(id(s2))         # 16035697648
print(id(s3))         # 16035697648
# s1, s2, s3 指向同一个地址, 'hello'的内存地址
# is 判断 s4 = 'world' print(id(s4)) # 1041659770672 print(s1 is s3) # True print(s1 is s4) # False

1.2 字符串的下标和切片 

# 字符串截取  字符串索引机制:  0 ~ len(s)-1  或  -len(s) ~ -1 
s1 = 'ABCDEFG'
print(s1[1])      # B
print(s1[0])      # A
# print(s1[9])    # IndexError: string index out of range
print(s1[-1])     # G
print(len(s1))    # 7

# 切片           格式:字符串变量[start:end)
print(s1[1:4])   # BCD
print(s1[0:5])   # ABCDE
print(s1[:5])    # ABCDE

print(s1[-3:-1])  # EF
print(s1[-3:])    # EFG  从-3开始到结尾

x = s1[:]
print(x)          # ABCDEFG
print(s1)         # ABCDEFG
print(id(x))      # 905626932208
print(id(s1))     # 905626932208

print(s1[1:-1])   # BCDEF

print('*'*20)
print(s1[:-1:2])   # ACE,从-len(s)到-1,step为2
print(s1[1::2])    # BDF
print(s1[::4])     # AE
# 字符串变量[start:end:step] 默认从左向右一个一个取元素
# step: 步长、方向。 正数->从左向右, 负数->从右向左
print(s1[::-1])    # GFEDCBA
print(s1[::-2])    # GECA
print(s1[0:6:-2])  # 为空
print(s1[6:0:-2])  # GEC

 

1.3 字符串常见操作 

  • 获取长度:  len
  • 查找内容:  find / index / rfind / rindex
  • 判断:    startswith / endswith / isalpha / isdigit / isalnum / isspace / isnumeric
  • 出现次数:  count
  • 替换内容:  replace
  • 切割字符串: split / rsplit / splitlines / partition / rpartition
  • 修改大小写: capitalize / title / upper / lower / swapcase
  • 空格处理:  ljust / rjust / center / lstrip / strip
  • 字符串拼接: join

注: 在Python中, 字符串是不可变的。所有字符串的相关方法,都不会改变原有字符串,都是返回一个结果。在新的返回值里,保留了执行后的结果。

# find:  从左向右查找,只要遇到一个符合要求的则返回位置。没有找到返回-1。
# rfind:  从右向左查找,只要遇到一个符合要求的则返回位置。没有找到返回-1。
# index 与 find 的区别: index如果没有找到会抛异常
path = 'https://pics2.baidu.com/feed/dong_0824ab18972bd4079fe54f4202278b580eb309a2.jpeg' i = path.find('_') print(i)            # 33 第一个匹配到的位置 image_name = path[i + 1:] print(image_name)       # 0824ab18972bd4079fe54f4202278b580eb309a2.jpeg i = path.find('#') print(i)        # -1  未匹配到时,返回-1 # ValueError: substring not found # i = path.index('#') # print(i) i = path.rfind('.') suffix = path[i:] print(suffix)        # .jpeg n = path.count('.') print(n)           # 3 s = '0824ab18972bd4079fe54f4202278b580eb309a2.jpeg' result = s.startswith('08')  print(result)        # True result = s.endswith('mp5') print(result)        # False s = 'HELLO' result = s.isalpha() print(result)        # True s = 'A1234_' result = s.isalnum()     print(result) s = '11123' result = s.isdigit() print(result) s = ' ' result = s.isspace() print(result)        # '' -> False ' '-> True ' '-> True s='helloA' result = s.isupper() print(result) result = s.islower() print(result)

 

s = '佛祖说: 阿弥陀佛,南无阿弥陀佛!'
result = s.replace('佛', '**')
print(result)  # **祖说: 阿弥陀**,南无阿弥陀**!
result = s.replace('佛', '**', 1) 
print(result)  # **祖说: 阿弥陀佛,南无阿弥陀佛!

result = s.replace('佛说', '##', 1)   # replace(old, new, count)
print(result)  # 佛祖说: 阿弥陀佛,南无阿弥陀佛!

s = '张三 李四 王五'
result = s.split(' ')
print(result)  # ['张三', '李四', '王五']

s = '''第一行唱山歌
第二行唱土歌
第三行唱歌
'''
result = s.splitlines()
print(result)  # ['第一行唱山歌', '第二行唱土歌', '第三行唱歌']

s = '张三 李四 王五'
result = s.partition(' ')
print(result)  # ('张三', ' ', '李四 王五')
result = s.rpartition(' ')
print(result)  # ('张三 李四', ' ', '王五')

 

s = 'hello world'
result = s.title()
print(result) # Hello World

result = s.upper()
print(result) # HELLO WORLD

result = s.lower()
print(result) # hello world

result = s.capitalize()
print(result) # Hello world

 

s = ' admin '
print(len(s))     # 7
result = s.strip()
print(len(result))  # 5
print(result)     # admin
result = s.lstrip()
print(len(result))  # 6
print(result)     # admin_
result = s.rstrip()
print(len(result))  # 6
print(result)     # _admin

s = 'hello world'
result = s.center(30)
print(result)     # |         hello world          |
result = s.ljust(30)
print(result)     # hello world                   |
result = s.rjust(30)
print(result)     # |                   hello world

 

name = '赵丽颖'
age = 30
result = '美女{}今年{}岁'.format(name, age)
print(result)    # 美女赵丽颖今年30岁

result = '美女{0}今年{1}岁,我也是{1}岁'.format(name,age)
print(result)    # 美女赵丽颖今年30岁,我也是30岁
result = '美女{girl}今年{a}岁,我也是{a}岁'.format(girl='君君',a=1)
print(result)    # 美女君君今年1岁,我也是1岁

stu_name = '艾玛'
score_math = 100
score_chinese = 90

s = '{0}本次考试数学分数为:{2},语文分数为:{1},英语分数为:{2}'.format(stu_name,score_chinese,score_math)
print(s)       # 艾玛本次考试数学分数为:100,语文分数为:90,英语分数为:100

 

s.maketrans(old,new)  创建一个转换表,用于将old中的字符改成new中的相应字符;

s.translate(table)    使用指定转换表(使用maketrans创建的)对s中的字符进行替换

s.zfill(width)        在s左边添加足够多的0,让字符串的长度为width

s = 'aabbcc'
table = s.maketrans('abc','ABC')
print(s.translate(table))           # AABBCC

print('23'.zfill(4))                # 0023
print('-87'.zfill(5))               # -0087

 

 

s = '_'
print(s.join('abc'))  # a_b_c

print(s.encode())     # b'_'

s = 'aaBBcc'
print(s.swapcase())   # AAbbCC

 

二、列表

2.1 定义列表

list1 = []             # 空列表
list2 = ['牛奶', '面包', '火腿', '辣条', '馒头']
print(type(list1))     # <class 'list'>
print(list2[3])        # 辣条
print(list2[0])        # 牛奶

2.2 列表操作

# 切片 [start,end)
print(list2[1:3])         # ['面包', '火腿']
print(list2[:2])          # ['牛奶', '面包']

print(list2[::-3])        # ['馒头', '面包']
print(list2[::3])         # ['牛奶', '辣条']
print(list2[-2:-5:-2])    # ['辣条', '面包']
print(list2[-2::-5])      # ['辣条'] 从右向左,-2到-5

  

# 添加
list1 = []
list2 = ['面包']
list1.append('苹果')
list1.append('香蕉')
list1.append('木瓜')
print(list1)                # ['苹果', '香蕉', '木瓜']
list1.append(list2)
print(list1)                # ['苹果', '香蕉', '木瓜', ['面包']]
list1 = list1 + list2
print(list1)                # ['苹果', '香蕉', '木瓜', ['面包'], '面包']
list1.extend(list2)
print(list1)                # ['苹果', '香蕉', '木瓜', '面包']
print(list1 * 2)            # ['苹果', '香蕉', '木瓜', '面包', '苹果', '香蕉', '木瓜', '面包']

 

if '苹果' in list1:
    print('存在')
else:
    print('不存在')

  

# pop(index): 根据下标删除列表中的元素,不能超出范围
# pop(): 从后往前依次删除
list1 = ['苹果', '香蕉', '木瓜', '面包', '馒头']
list1.pop()
print(list1)  # ['苹果', '香蕉', '木瓜', '面包']
list1.pop() 
print(list1)  # ['苹果', '香蕉', '木瓜']

  

# remove: 只删除匹配到,如果列表中有多个同名元素,只删除遇到的第一个元素,后面的元素不会被删除。
list2 = ['苹果', '馒头', '香蕉', '木瓜', '面包', '馒头']
list2.remove('馒头')
print(list2)  # ['苹果', '香蕉', '木瓜', '面包', '馒头']
# ValueError: list.remove(x): x not in list
# list2.remove('菠萝')

list2 = ['苹果', '馒头', '香蕉', '木瓜', '面包', '馒头']
for i in list2:
    if i == '馒头':
        list2.remove(i)
print(list2)  # ['苹果', '香蕉', '木瓜', '面包']

list3 = ['苹果', '馒头', '馒头', '馒头', '香蕉', '木瓜', '面包', '馒头', '菠萝']
for i in list3:
    if i == '馒头':
        list3.remove(i)
print(list3)  # ['苹果', '香蕉', '木瓜', '面包', '馒头','菠萝']

list4 = ['苹果', '馒头', '馒头', '香蕉', '木瓜', '面包', '馒头', '菠萝']
n = 0
while n < len(list4):
    if list4[n] == '馒头':
        list4.remove('馒头')
    else:
        n += 1
print(list4)  # ['苹果', '香蕉', '木瓜', '面包', '菠萝']

  

list1 = [1, 2, 3, 4, 5, 6]
list1.insert(1, 8)
print(list1)  # [1, 8, 2, 3, 4, 5, 6]
list1[1] = 9
print(list1)  # [1, 9, 2, 3, 4, 5, 6]

pos = list1.index(4)
list1[pos] = 14
print(list1)  # [1, 9, 2, 3, 14, 5, 6]

li = ['苹果', 1, 2, '苹果', '苹果', 45, 12, '苹果']
for i in range(li.count('苹果')):
    li.remove('苹果')
print(li)  # [1, 2, 45, 12]

del li
# NameError: name 'li' is not defined
# li.append(10)
# print(li)

  

list1 = [1, 2, 3, 4, 5, 6]
print(id(list1))  # 418405881856
list2 = list1
print(list2)      # [1, 2, 3, 4, 5, 6]
print(id(list2))  # 418405881856
list2.append(88)
print(list1)      # [1, 2, 3, 4, 5, 6, 88]
print(list2)      # [1, 2, 3, 4, 5, 6, 88]
list1.clear()
print(list2)      # []
del list2
print(list1)      # []

a = 'hello'
b = a
c = a
del a
print(b, c)       # hello hello

  

import random

numbers = []
for i in range(8):
    ran = random.randint(1,20)
    numbers.append(ran)
print(numbers)         # [15, 6, 20, 6, 4, 8, 16, 13]
numbers.sort()         # 默认为升序
print(numbers)         # [4, 6, 6, 8, 13, 15, 16, 20]
numbers.sort(reverse=True)
print(numbers)         # [18, 17, 13, 10, 9, 6, 1, 1]
# 反转
numbers.reverse()      # [18, 5, 17, 19, 3, 6, 7, 10]
print(numbers)

  

# 自引用列表: 让一个列表元素指向列表本身
# 打印输出中的[...]表明,Python能够识别自引用,没有愚蠢地不断打印列表。
lst = [1, 2, 'c', 'd', 'f']
lst[2] = lst
print(lst)             # [1, 2, [...], 'd', 'f']

  

# 列表循环
numbers = [18, 5, 17, 19, 3, 6, 7, 10]
for i in numbers:
    print(i)

 

#交换两个变量的值
a = 2
b = 3
print(a, b)  # 2 3
c = a
a = b
b = c
print(a, b)  # 3 2

a, b = b, a
print(a, b)  # 2,3

  

# 手动冒泡排序:
num = []
for i in range(8):
    ran = random.randint(1, 100)
    num.append(ran)
print('排序前的num:', num)
for i in range(len(num)-1):
    for j in range(len(num)-1-i):
        if num[j] > num[j + 1]:
            temp = num[j]
            num[j] = num[j + 1]
            num[j + 1] = temp
        else:
            j += 1
    print('第{}次排序结果为{}'.format(i,num))
print('排序后的num:', num)
#-----------------------------------
排序前的num: [89, 54, 41, 31, 82, 70, 42, 15]
第0次排序结果为[54, 41, 31, 82, 70, 42, 15, 89]
第1次排序结果为[41, 31, 54, 70, 42, 15, 82, 89]
第2次排序结果为[31, 41, 54, 42, 15, 70, 82, 89]
第3次排序结果为[31, 41, 42, 15, 54, 70, 82, 89]
第4次排序结果为[31, 41, 15, 42, 54, 70, 82, 89]
第5次排序结果为[31, 15, 41, 42, 54, 70, 82, 89]
第6次排序结果为[15, 31, 41, 42, 54, 70, 82, 89]
排序后的num: [15, 31, 41, 42, 54, 70, 82, 89]

  

 

上一篇:Python 列表(List)


下一篇:爬虫与Python:(二)Python基础篇——7.列表