Python数据分析系列(三):python数据类型—字符串、列表、元组、字典与集合

本文详细介绍了Python中的基本数据结构——序列,包括字符串、列表、元组、字典和集合的创建、操作和应用。内容涵盖序列的定义、标准运算符、内建函数、序列类型转换、常见序列的操作方法以及各种序列类型的实例和练习题,旨在帮助读者深入理解Python的序列数据类型及其使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文主要介绍python标准数据类型(字符串、列表、元组、字典与集合)的使用。


一、认识序列

序列是python 中最基本的数据结构 ,python中有5种常见序列,包含字符串、列表、元组、字典、集合是最常见的序列,序列中每个元素都有一个跟位置相关的序号,也称为索引 ,对于一个序列来说,第一个元素从索引0开始,最后一个元素的索引就是N-1,也可以从最后一个元素开始计数,那么第一个元素就是-N。

python中的序列是可以迭代的,也就是说可以遍历对象的内部元素。序列对象的迭代需要用到它的索引。

  • 元素是从0开始通过下标偏移量访问
  • 一次可访问一个或多个元素

在这里插入图片描述
通过索引访问序列,一次可以访问一个或多个元素,也叫切片。

参考文章:python相关序列

二、序列的相关操作

1、标准类型运算符

  • 值比较
  • 对象身份比较
  • 布尔运算
    • 值比较
< >
<= >=
== !=

示例:

'apple' < 'banana' # 比较字符串大小

[1,3,5] != [2,4,6] # 比较列表元素一样

aTuple = ('BA', 'The Boeing Company', '184.76')

bTuple = aTuple
bTuple
    • 对象身份比较
is is not

示例:

bTuple is not aTuple
    • 布尔运算
not and or

示例:

('86.40' < '122.64') and ('apple' > 'banana')

2、序列类型运算符

  • 获取:切片(s[i]、|s[i:j]、s[i:j:k])
  • 重复:s*n,n*s
  • 连接:s+t
  • 判断:x in s、x not in s

示例:

week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print(week[1], week[-2], '\n', week[1:4], '\n', week[:6], '\n', week[::-1])

'apple' * 3

'pine' + 'apple' 

'BA' in ('BA', 'The Boeing Company', '184.76')

参考文章:切片的使用

3、内建函数

序列类型转换内建函数

  • list(seq):将序列seq转换为列表
  • str(seq):将序列seq转换为str
  • tuple(seq):将序列seq转换为元组

示例:

list('Hello, World!') # 将字符串转换成列表
tuple('Hello, World!') # 将字符串转换成元组

其他常用内建函数

  • enumerate() :返回一个enumerate对象,对象是由元素的索引和值构成的一个个元组,类似(0,‘1’),在要遍历索引又要遍历元素的时候非常方便。
  • len() :求序列的长度
  • max() :求序列里面的最大值
  • min() :求序列里面的最小值
  • reversed() :逆序
  • sorted() :对序列进行排序
  • sum() :对序列求和
  • zip() :由一系列可迭代的对象作为参数,它把对象对应的元素打包成一个一个元组。
  • hash(object):返回对象(字符串或者数值等)的hash值。

示例1:len()、sorted()

aStr='Hello, World!' # 字符串
alst=[1,2,3]         # 列表
aTuple=(3,5,4,2)     # 元组
adict={
   "id":"l100","name":"cooc"}  # 字典

len(aStr) # 输出:13
len(alst) # 输出:3
len(aTuple) # 输出:4
len(adict) # 输出:2


sorted(aStr) # 输出:[' ', '!', ',', 'H', 'W', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r']
sorted(alst) # 输出:[1, 2, 3]
sorted(aTuple) # 输出:[2, 3, 4, 5],aTuple 原元组序列没有改变:(3, 5, 4, 2)
sorted(adict) # 输出:['id', 'name'],将字典直接传入到sorted()中,sorted()会默认根据字典的键keys的内容排序,并且只取字典键的内容,并以列表的形式返回。

示例2:enumerate()

#当a为一个字符串
a='hello'
for i,j in enumerate(a):
	print(i,j)
# 输出:
# 0 h
# 1 e
# 2 l
# 3 l
# 4 o

#当a为一个元组时
a=('hello','world')
for i,j in enumerate(a):
	print(i,j)	
# 输出:
# 0 hello
# 1 world

#当a为一个列表时
a=['hello','world']
for i,j in enumerate(a):
	print(i,j)
# 输出:
# 0 hello
# 1 world


#当a为一个字典时
a={
   'a':'hello','b':'world'}
for i,j in enumerate(a):
	print(i,j)
# 输出:
# 0 a
# 1 b

示例3:zip()

a=[1,2,3]
b=[4,5,6]
c=[4,5,6,7,8]
zipped=zip(a,b) #返回一个对象

list(zipped)
# 输出:
# [(1, 4), (2, 5), (3, 6)]

list(zip(a,c))  # 元素个数与最短的列表一致
# 输出:
# [(1, 4), (2, 5), (3, 6)]

a1,a2=zip(*zip(a,b)) #与zip相反,zip(*)可以理解为解压,返回二维矩阵。
a1 # 输出:(1, 2, 3)
a2 # 输出:(4, 5, 6)
#同时遍历多个字典
dict_one = {
   'a': 'John', 'b': 'Doe', 'c': 'Python Consultant'}
dict_two = {
   'a': 'Jane', 'b': 'Doe', 'c': 'Community Manager'}

for (k1,v1),(k2,v2) in zip(dict_one.items(), dict_two.items()):
	print(k1,"=",v1)
	print(k2,"=",v2)

# 输出:
# a = John
# a = Jane
# b = Doe
# b = Doe
# c = Python Consultant
# c = Community Manager
#对多个元素同时进行排序
names=['lily','mary','jack']
scores=[90,88,100]
data=list(zip(names,scores))
data.sort()
data

# 输出:
# [('jack', 100), ('lily', 90), ('mary', 88)]
#将数据成对进行计算
total_sales=[52000.00, 51000.00, 48000.00]
prod_cost=[46800.00, 45900.00, 43200.00]
for sales,costs in zip(total_sales,prod_cost):
	profit=sales-costs
	print('Total profit: {}'.format(profit))

# 输出:
# Total profit: 5200.0
# Total profit: 5100.0
# Total profit: 4800.0
#构建字典
dict1=dict(zip(names,scores))

# 输出:
# {'lily': 90, 'mary': 88, 'jack': 100}

示例4:hash(object)

hash('test')            # 字符串
# 输出:-398426669482169457
hash(1)                 # 数字
# 输出:1
hash(str([1,2,3]))      # 集合
# 输出:-3006469042971424525
hash(str({
   'name':"zoey"}))  # 字典
# 输出:4439473790715533587

三、常见的序列

1、字符串

字符串的不同表现形式

单引号( ‘’ )、双引号( " " )、三引号( ‘’’ ‘’’ )都可以表示字符串
对于一些带’的英文语句,用""更加方便
对于要换行的英文语句,用’‘’ ‘’'更加方便

示例:

astr="i'm mila"
bstr='''my 
name
'''

print(astr,bstr)

字符串常用方法

  • str.captalize():将字符串的第一个字母变大写,其他字母变小写。
  • str.center():返回一个指定宽度居中的字符串。
  • str.count():统计字符串里某个字符出现的次数。
  • str.encode():以指定的编码格式编码字符串。
  • str.endswith():判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回 True,否则返回 False。
  • str.find():从左开始检测字符串中是否包含子字符串 str, 如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回 -1。
  • str.format():字符串与输出形式,可以参考:https://blog.youkuaiyun.com/sodaloveer/article/details/134133286
  • str.index():从左开始检测字符串中是否包含子字符串 str,与 find() 方法一样,只不过如果str不在 string中会报一个异常。
  • str.isalnum():检测字符串是否由字母和数字组成。
  • str.isalpha():检测字符串是否只由字母或文字组成。
  • str.isdigit():检测字符串是否只由数字组成。
  • str.islower():检测字符串是否只由小写字母组成。
  • str.isspace():检测字符串是否只由空白字符组成。
  • str.istitle():检测字符串是否首个字母都为大写,其余字母均为小写。
  • str.isupper():检测字符串是只由大写字母组成。
  • str.join():用于序列中的元素以指定的字符连接生成一个新的字符串。
  • str.ljust():返回一个原字符串左对齐并使用指定字符填充(默认为空格)至指定长度的新字符串,如果指定长度小于原字符串的长度则返回原字符串。
  • str.lower():转换字符串中所有大写字符为小写(符号和数字将被忽略)。
  • str.lstrip():用于删除字符串左边的指定字符(默认为空格),包括空格、换行符、回车符、制表符,或字符序列。
  • str.maketrans():用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
  • str.partition():搜索指定的字符串,并将该字符串拆分为包含三个元素的元组。第一个元素包含指定字符串之前的部分,第二个元素包含指定字符串,第三个元素包含字符串后面的部分。
  • str.replace():把字符串中的old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过max次。
  • str.rfind():从右开始检测并返回字符串最后出现的位置,如果没有匹配项则返回 -1 。
  • str.rindex():从右开始检测并返回字符串 str 在字符串中最后出现的位置,与 rfind() 方法一样,只不过如果没有匹配的字符串会报异常。
  • str.rjust():返回一个原字符串右对齐并使用指定字符填充(默认为空格)至长度的新字符串,如果指定长度小于原字符串的长度则返回原字符串。
  • str.rpartition():搜索指定字符串的最后一次出现,并将该字符串拆分为包含三个元素的元组。第一个元素包含指定字符串之前的部分,第二个元素包含指定字符串,第三个元素包含字符串之后的部分。
  • str.rstrip():用于删除字符串末尾的指定字符(默认为空格),包括空格、换行符、回车符、制表符,或字符序列。
  • str.split():通过指定分隔符(默认为空白字符)从左侧对字符串进行切片成列表,如果第二个参数num有指定值,则分割为num+1个子字符串。
  • str.splitlines():按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
  • str.startswith():判断字符串是否以指定字符串开头,如果是则返回 True,否则返回 False。
  • str.strip():用于删除字符串头尾指定字符(默认为空格),包括空格、换行符、回车符、制表符,或字符序列。
  • str.swapcase(): 用于对字符串的大小写字母进行转换,即将大写字母转换为小写字母,小写字母会转换为大写字母。
  • str.title():返回"标题化"的字符串,就是说所有单词的首个字母转化为大写,其余字母均为小写。
  • str.translate(): 返回被转换的字符串。
  • str.upper():将字符串中的小写字母转为大写字母(符号和数字将被忽略)。
  • str.zfill():返回指定长度的字符串,原字符串右对齐,前面填充0。

示例:

song="blowing in the wind"
song.find("the") # 输出:11

song.find("the",8,12) # 输出:-1
song.upper() # 输出:'BLOWING IN THE WIND'
song.split() # 输出:['blowing', 'in', 'the', 'wind']
song.replace("the","that") # 输出:'blowing in that wind'

alist=["hello","world"]
' '.join(alist) # 输出:'hello world'

y="你好"
z=y.encode("utf-8") # 输出:b'\xe4\xbd\xa0\xe5\xa5\xbd'
t=z.decode() # 输出:'你好'

字符串的应用

示例1:将字符串“Hello,World!”中的“World”替换成“Python’并计算其包含的标点符号( 由逗号、句号、感叹号和问号组成 )的个数。

s="Hello,World!"
s=s[:6]+'Python!'
count=0
for i in s[:]:
	if i in ',.!?':
		count+=1
print(count)

# 输出:
# 2

示例2:字符串与输出形式:format_string.format()

print("there are %d punctuation marks." % (count))
print("there are {0:d} punctuation marks." .format(count))

# 输出:
# there are 2 punctuation marks.
age,height=21,1.6545
print("Age:{0:<5d},Height:{1:5.2f}".format(age,height))

# 输出:
# Age:21   ,Height: 1.65
cCode = ['AXP' , 'BA' , 'CAT' , 'CSCO' , 'CVX' ]
cPrice = ['78.51' , '184.76' , '96.39' , '33.71' , '106.09' ]
for i in range(5):
	print('{:<8d}{:8s}{:8s}'.format(i, cCode[i], cPrice[i]))
	
# 输出:
# 0       AXP     78.51   
# 1       BA      184.76  
# 2       CAT     96.39   
# 3       CSCO    33.71   
# 4       CVX     106.09  
print("I get {:d}{
   {}}!".format(88))
# 输出:
# I get 88{}!

参考文章:format格式化函数的使用

示例3:有一个字符串“acdhdca”,判断字符串是否是回文串。

方法一:join()函数

astr="acdhdca"
if astr == ''.join(reversed(astr)):
	print("Yes")
else:
	print("No")

方法二:切片

astr="acdhdca"
if astr == astr[::-1]:
	print("Yes")
else:
	print("No")
# 输出:
# Yes

示例4:有一些从网络上下载类似如下形式的句子:What do you think of this saying “No pain,No gain”?对于句子中双引号中的内容,首先判断其是否满足标题格式,不管满足与否最终都将其转换为标题格式输出。

astr = 'What do you think of this saying "No pain,No gain"?'
lindex=astr.index('\"',0,len(astr))
rindex=astr.rindex('\"',0,len(astr))
tempStr=astr[lindex+1:rindex]
if tempStr.istitle():
	print('it is title format.')
else:
	print('it is not title format.')
print(tempStr.title())

# 输出:
# it is not title format.
# No Pain,No Gain

转义字符

字符 说明
\0 空字符
\a 响铃
\b 退格
\t 横向制表符
\n 换行
\v 纵向制表符
\f 换页
\r 回车
\e 转义
" 双引号
单引号
\ 反斜杠
\(在行尾时) 续行符

参考文章:字符串str的的使用方法

练习题

题目1:

使用以下语句存储一个字符串:
string = ‘My moral standing is: 0.98765’
将其中的数字字符串转换成浮点数并输出。
(提示:可以使用find()方法和字符串切片或split()方法,提取出字符串中冒号后面的部分,然后使用float函数,将提取出来的字符串转换为浮点数)

string1 = 'My moral standing is: 0.98765'

# 方法一:
string2 = string1.split(": ")
string3 = float(string2[1])

# 方法二:
string2 = string1[22:]
string3 = float(string2[1])

题目2:

编程找出列表中不包含元音字母(包括大小写) 和数字的所有单词并按原始先后顺序输出
【测试数据与输出结果】
假设给定的字符串为(在程序中直接赋值) :
[‘HELLO’, ‘PH’, ‘Hi’, ‘read’, ‘tmp123’, ‘Our’, ‘vmr’]
输出:
PH
vmr

words=['HELLO', 'PH', 'Hi', 'read', 'tmp123', 'Our', 'vmr']
for item in words:
	item_temp=item.lower()
	for ch in item_temp:
		if ch in 'aeiou' or ch in '0123456789':
			break 	
	else:
		print(item)

2、列表

列表的不同表现形式

  • 可扩展的容器对象
  • 可以包含不同类型对象
  • 一维列表、多维列表

示例:

alist=['action',1,2,3]
blist=['action','movie']
clist=[1,2,3]
list1=[1,2,3,4,5,6,7,8,9,10,11,12,<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值