1.切片版 str[::-1]
str[start:end:step] 值都可以省略!
def string_reverse(string): return string[::-1]
str[2:-1]
实际上取的是[2,-1) 若要取到最后,应该是str[2:]
2.str转list 然后list.reverse() 新str使用''.join拼接每个元素
list.sort()
sorted(list)
但是这里是reverse 不是sort排序
def string_reverse(string):
list_str = list(string)
list_str.reverse()
return ''.join(list_str)
3.str转list 然后不反转,直接倒序遍历,加到新str
def string_reverse(string):
list_str = list(string)
new_str = ''
max_index = len(list_str) - 1
for i in range(max_index,-1,-1):
new_str += list_str[i]
return new_str
4.注意一个错误:str[0] = 'A' 不行的
只有先转list 才能list[0] = ‘a’ 这样赋值
5.swap版本
# - 对于int float string等类型,python函数传递的是值
# - 对于list dict等类型,python函数传递的是引用
def swap(list,i,j):
temp = list[i]
list[i] = list[j]
list[j] = temp
return list
def string_reverse(string):
list_str = list(string)
len_str = len(list_str)
middle_index = int(len_str/2)
for i in range(0,middle_index):
swap(list_str,i,len_str-1-i)
return ''.join(list_str)
可变数据类型 不可变数据类型
python不允许程序员选择采用值传递还是引用传递。
不可变对象:数字int float 字符串string 元组tuple等
创建变量之后,内存地址就固定下来了
如果函数收到的是一个不可变对象(数字int float、字符串string或tuple 如(1,2))的引用,就不能直接修改原始对象--相当于通过‘值传递’来传递对象。
可变对象:字典dict 列表list 等
创建变量之后,内存地址可能会变,因为各个元素离散分布在内存中,删了第0个,就变了
如果函数收到的是一个可变对象(字典dict、列表list)的引用,就能修改对象的原始值--相当于‘引用传递’来传递对象
string 虽然可以
string += 'a'
但加了之后,内存首地址不变,只是把后面的00000填起来了。所以是不可变类型 内存地址不能变!
list 删了值之后,比如删了第一个值,内存地址可能会变