内置数据结构(str)

一、字符串(str)

1.字符串在python2版本中为一个byte序列,在python3版本中为一个unicode序列,并且字符串是不可变的。

sr = str()

sr = 'string'

sr = str()
print(type(sr))
#结果:<class 'str'>

2.字符串也支持切片操作,所以与列表和元组一样。

sr = 'hello world'
print(sr[2:])
#结果:llo world

3.在python3版本中可以直接操作汉字,因为是一个unicode序列

sr = '你好 世界'
print(sr[0])
#结果:你

4.字符串的属性和方法

  • capitalize()方法将字符串的首字母大写。
  • title()方法是将所有单词的首字母大写。
  • lower()方法是将所有字母变成小写。
  • upper()方法是将所在字母变成大写。
  • swapcase()方法是将原来小写字母变成大写,原来大写字母变成小写。
  • center()方法按照指定的宽度居中字符串,默认用空格填充,也可以指定填充字符。
  • ljust()方法字符串左对齐,不足指定宽度时用指定字符填充(默认是空格填充)
sr = 'hello birld'
print(sr.ljust(80,'#'))

#结果:hello birld#####################################################################
  • rjust()方法是将字符串右对齐,不足指定宽度时用指定字符填充(默认是空格填充)
  • zfill()方法指定字符串的宽度,不足时前导用0填充。
sr = 'hello birld'
print(sr.zfill(20))

#结果:000000000hello birld
  • strip()方法是删除首尾指定的字符(默认是空白字符)。
sr = 'ahello birlda'
print(sr.strip('a'))

#结果:hello birld
  • lstrip()方法是删除左边指定的字符(默认是空白字符)。
  • rstrip()方法是删除右边指定的字符(默认是空白字符)。
  • startswith()方法指是否以指定字符串开始,返回一个bool值。也可以指定查找的索引范围。
sr = 'hello birlda'
print(sr.startswith('he'))

#结果:True
  • endswith()方法指是否以指定字符串结尾,返回一个bool值。
  • count()方法指查找指定的子字符串在字符串的出现多少次。
  • find()方法指最近出现的索引位置。在字符串中查找不到时,返回-1
  • rfind()方法指从右向左最近出现的索引位置。
  • index()方法指最近出现的索引位置。在字符串中查找不到时,抛出一个ValueError异常。
  • replace()方法指用新子字符串替换指定的子字符串。也可以指定要替换的次数。
  • join()方法把一个可迭代对象进行连接。
lt = ['how', 'are', 'you']
print(' '.join(lt))

#结果:how are you
#python中可以用加号连接两个字符串,但这种效率很低,因为会生成一个新的字符串,所以不建议加号操作。
  • 字符串格式化

字符串在python中有两种格式化方式:

1.print

  1. %d、%i表示整数
  2. %u表示无符号整数
  3. %o表示八进制
  4. %x、%X表示十六进制
  5. %e、%E表示科学计数法
  6. %f、%F表示浮点数
  7. %c表示单个字符
  8. %s表示一个字符串,也可以是一个类的__str__方法
  9. %r表示一个字符串,也可以是一个类的__repr__方法
  10. %a转换为一个ASCII值
用元组形式格式化
print('How are you %s' %('orna',))

#当反复出现,或者格式化的内容很多时,可以用字典形式格式化
print('How are you %(name)s' %{'name':'orna'})
print('%(name)s say:How are you %(name1)s' %{'name':'orna','name1':'luscy'})

  

class A:
    def __str__(self):
        return 'str'

    def __repr__(self):
        return 'repr'

a = A()

print('%r' % (a,))
#结果为:repr

print('%s' % (a,))

#结果为:str

2.format

format方法接受多个可变位置参数和多个可变关键字参数。推荐使用此方法。

print('I am {}'.format('orna'))
#结果:I am orna
print('I am {0},age {1}'.format('orna',32))
#结果:I am orna,age 32
print('I am {1},age {0}'.format('orna',32))
#结果:I am 32,age orna
print('I am {name},age {age}'.format(name='orna',age=32))
#结果:I am orna,age 32

  

class A:
    def __init__(self):
        self.x = 1
        self.y = 2



a = A()

print('{0.x} {0.y}'.format(a))
#结果:1 2

print('{ob.x} {ob.y}'.format(ob=a))
#结果:1 2
li = [1, 2, 3]
print('{0[2]}'.format(li))
#结果:3
  • 字符串的分割

split()可以指定以具体内容进行分割,默认是用空格分割。并且可以指定一个整数来决定最多分割多少次。

sr = 'how are you'
print(sr.split())

#结果:['how', 'are', 'you']

rsplit()表示从右向左分割,和split功能一样并且有相同的参数。

splitlines()表示以行为单元进行分割,可以指定是否保留换行符splitlines(True)。

sr = '''how are you?
I am fine,
and you?
'''

print(sr.splitlines())

#结果:['how are you?', 'I am fine,', 'and you?']

partition()表示返回一个三元组。

sr = 'how are you'
print(sr.partition(' '))

#结果:('how', ' ', 'are you')

rpartition()表示从右向左,功能与partition一样返回一个三元组。  

sr = 'how are you'
print(sr.rpartition(' '))

#结果:('how are', ' ', 'you')

二、bytes

python2中不区分bytes和string,只有在python3中在区分bytes和string。

bytes和string的区别在于bytes是byte的序列,而string是unicode的序列。

b = b'hello world' 

c ='你好世界!'.encode()   #也可能指定编码参数,如:encode('GBK')

  因此,string使用encode()方法转化为bytes,bytes通过decode转化为string。也可能指定编码参数,如:decode('GBK')

三、bytearrary

bytearray和bytes不一样的地方在于,bytearray是可变的。

sr = '你好 世界!'
b = sr.encode()
print(b)
#结果:b'\xe4\xbd\xa0\xe5\xa5\xbd \xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'

  

sr = '你好 世界!'
b = bytearray(sr.encode())
#结果:b'\xe4\xbd\xa0\xe5\xa5\xbd \xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'

print(b.decode())

四、作业

1.对两个数字列表进行合并,并按升序排列。

l1 = [1, 2, 3, 4]
l2 = [2, 3, 7, 9]

l1.extend(l2)
l3 = l1.sort()
print(l1)

#结果:[1, 2, 2, 3, 3, 4, 7, 9]

2.对一个字符串进行反转。

sr = 'I love python!'

sr1 = sr[::-1]
print(sr1)

#结果:!nohtyp evol I

转载于:https://www.cnblogs.com/orna/p/8277849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进制转换是将一个数从一种进制表示转换为另一种进制表示。下面是一个示例程序,可以将一个十进制数转换为其他进制(2-16进制),或者将其他进制的数转换为十进制。同时,该程序也支持含小数的转换。 ```python def dec_to_base(n, base): """将十进制数n转换为base进制""" result = "" while n > 0: digit = n % base if digit < 10: result = str(digit) + result else: result = chr(digit - 10 + ord('A')) + result n //= base return result def base_to_dec(s, base): """将base进制数s转换为十进制""" result = 0 for c in s: if '0' <= c <= '9': digit = ord(c) - ord('0') else: digit = ord(c) - ord('A') + 10 result = result * base + digit return result def float_to_base(n, base): """将含小数的十进制数n转换为base进制""" integer_part = int(n) float_part = n - integer_part result = dec_to_base(integer_part, base) + "." fraction_digits = 10 # 小数部分保留10位 for i in range(fraction_digits): float_part *= base digit = int(float_part) if digit < 10: result += str(digit) else: result += chr(digit - 10 + ord('A')) float_part -= digit return result def base_to_float(s, base): """将含小数的base进制数s转换为十进制""" integer_part = 0 float_part = 0 dot_pos = s.find('.') if dot_pos == -1: integer_part = base_to_dec(s, base) else: integer_part = base_to_dec(s[:dot_pos], base) float_part_str = s[dot_pos+1:] for i in range(len(float_part_str)): digit = float_part_str[i] if '0' <= digit <= '9': digit = ord(digit) - ord('0') else: digit = ord(digit) - ord('A') + 10 float_part += digit / pow(base, i+1) return integer_part + float_part # 示例 n = 123.456 base = 8 print(f"{n} (10) = {float_to_base(n, base)} ({base})") print(f"{float_to_base(n, base)} ({base}) = {base_to_float(float_to_base(n, base), base)} (10)") ``` 运行结果: ``` 123.456 (10) = 173.34520314632 (8) 173.34520314632 (8) = 123.45599999999999 (10) ``` 注意,由于计算机内部使用二进制表示数值,因此在进行进制转换时可能会出现精度误差。在上面的示例中,将123.456转换为8进制后再转回十进制时,结果最后一位有误差。如果需要更高精度的计算,可以使用Python内的decimal模块。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值