算法小抄2-刷题中Python的常用语法

标准数据类型

不可变数据类型: Number String Tuple

可变数据类型:List Dictionary Set

关于为什么会分成可变和不可变最后会讲到哦

Number

Number支持int,float,bool,complex四种,其中int范围小且必须为整数,float范围较大,可以是是小数,bool值表示是否,complex为复数,赋值方式为直接赋值

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
结果输出:<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

值得注意的是,在Python中bool是int的子类,true和false是可以进行相加相减操作的,在进行加减操作时true=1,false=0

String

String表示字符串,在python中使用''或者""括起来的数据类型就是字符串,字符串的索引从0开始,同时可以使用负数来表示字符串末尾的位置,例如-1表示当前字符串的最后一个字符,例子如下:

字符串: abcd

a字符所在位置为0,用负数表示为-4

d字符所在位置为3,用负数表示为-1

 Python中的字符串可以进行截串操作,例如abcd可以截成子串ab,cd,bcd等,其语法为

 str[头下标:尾下标],用数学的方式来表示str截串的范围是[头下标,尾下标),是一个左闭右开的区间(这不仅仅是在python语言中,其他语言也是如此,这点要记住哦),一些截串的例子如下:

str="abcd"
print(str) #输出abcd
print(str[0:2])#输出头下标为0,尾下标为2的字符串,由于是左闭右开区间,所以输出ab
print(str[0:-1])#输出头下标为0,尾下标为-1的字符串,即输出abc
print(str[1:])#在python中如果省略尾下标,表示的是输出从头下标开始所有的字符串,在这里表示bcd
print(str[1])#如果冒号和尾下标都被省略了,表示输出的是头下标位置的字符,在这里是b

还记得在最开时的时候说过字符串是不可变数据类型吗,这表示一旦str="abcd",我们无法通过str[0]=b的方式将str修改为"bbcd"

List(列表)

可以理解为一个装着元素的容器,在这个容器内部,元素时按照顺序放置的,也就是只要这个列表不被改变,我们就可以通过下标来获取其中的某个元素,它也能进行截串操作,且方式和字符串完全一致,这里相同的部分就不再赘述啦,直接给出相关例子:

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]

print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素'abcd'
print (list[1:3])       # 从第二个开始输出到第三个元素 786,2.23

与字符串不一样的是,列表是可改变的数据类型,这表示可以通过list[i]=j的方式将列表索引为i的位置的元素修改为j,如果配合上截串操作,那么效果将会是下面这样:

>>> a = [1, 2, 3, 4, 5, 6] #初始化数组
>>> a[0] = 9 #第0个位置的值设置为9,现在数组是9,2,3,4,5,6
>>> a[2:5] = [13, 14, 15] #[2,5)区间的元素设置为[13,14,15],现在数组是[9,2,13,14,15,6]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = []   # 将[2,5)区间的元素设置为空,即清除这个区间里的元素
>>> a
[9, 2, 6]

第二个不一样的点在于列表的截串有三个参数,第三个参数表示为截取的步长,犹如下方的列子,runoob这个字符串,我们截取[1,4)即uno这三个字符,步长为2,说明我们需要数2个位置截取一个字符,则结果为[u,o]

那么letters[-1: :-1]表示的是什么意思呢?

第一个元素,表示截串开始的位置,-1,为最后一个字符

第二个元素为空,说明结尾的位置会持续到字符串结束

第三个参数为步长,-1表示逆向走1步记录一个字符

所以letters[-1::-1]其实就是翻转了这个列表,即[b,o,o,n,u,r]

字符串和列表的转换

这里给出一个关于字符串的题目,可以自己操作实现一下: 输入一个字符串,例如abc,def,gh,将该字符串翻转成为gh,def,abc 前面我们说到,字符串是不可变的而列表是可变的,由于我们要对字符串进行翻转操作,所以我们得先将字符串转换为列表,相关的接口有

  • split("分隔符") :可以将字符串以分割符的方式分割成列表
  • 分隔符.join(列表): 可以将列表转化为字符串
str=123,456,789
list=str.split(",")
print(list) #输出的是[123,456,789]这个列表
output='/'.join(list)
print(output) #输出的是123/456/789这个字符串,我们使用'/'做了分割符

看到这里你应该能做出以上题目了:

def reverseWords(input):
     
    # 通过空格将字符串分隔符,把各个单词分隔为列表
    inputWords = input.split(" ")
 
    # 翻转字符串
    inputWords=inputWords[-1::-1]
 
    # 重新组合字符串
    output = ' '.join(inputWords)
     
    return output 

 元组

与列表类似,但是它是不可变的容器,即元素无法修改,元组元组,原始的数组,是不是很好理解,列表使用[ ]包裹元素,而元组使用(),例子如下:

tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2  )
print (tuple)             # 输出完整元组
print (tuple[0])          # 输出元组的第一个元素
print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
print (tuple[2:])         # 输出从第三个元素开始的所有元素

集合

集合也是一个容器,与列表不同,它不允许元素重复,并且可以快速查询,某个元素是否存在于集合中,并且可以进行差集,并集和交集运算,由于它是无序容器,它里面的元素在遍历时与插入时的顺序无关,它使用{}创建,例子如下

sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

print(sites)   # 输出{'Zhihu', 'Baidu', 'Taobao', 'Runoob', 'Google', 'Facebook'}

# 成员测试,输出Runoob 在集合中
if 'Runoob' in sites :
    print('Runoob 在集合中')
else :
    print('Runoob 不在集合中')


# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a) #{'b', 'c', 'a', 'r', 'd'}

print(a - b)     # a 和 b 的差集,{'r', 'b', 'd'}

print(a | b)     # a 和 b 的并集,{'b', 'c', 'a', 'z', 'm', 'r', 'l', 'd'}

print(a & b)     # a 和 b 的交集,{'c', 'a'}

print(a ^ b)     # a 和 b 中不同时存在的元素, {'z', 'b', 'm', 'r', 'l', 'd'}

字典

理解了集合,就很容易理解字典了,字典与集合类似,不过它存储的是键值对(key,value),如果把集合理解为字典的话,那么集合的键值对应该写成(key,null),其中null表示没有元素,在同一个字典里key必须是唯一的,value则可以不唯一,列子如下:

dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2]     = "2 - 菜鸟工具"

tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}

 
print (dict['one'])       # 1-菜鸟教程
print (dict[2])           # 2-菜鸟工具
print (tinydict)          # {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
print (tinydict.keys())   # dict_keys(['name', 'code', 'site'])
print (tinydict.values()) # dict_values(['runoob', 1, 'www.runoob.com'])

和集合一样,set里面的值也是无序排放的,所以无法通过索引下标拿到顺序存储的元素,在上一篇博客中,使用的hashtable其实就是字典

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值