NC103 反转字符串 - python值传递 引用传递

 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    删了值之后,比如删了第一个值,内存地址可能会变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值