python列表字符串互转和反转输出

本文详细介绍了Python中字符串与列表互相转换的方法,包括如何使用split(), join(), list()等函数,以及如何通过切片、reverse()和递归等方式实现数据结构的反转。适合初学者和需要复习基础概念的开发者。

 

1. 字符串转列表

str1 = "12345"
list1 = list(str1)
print list1
 
str2 = "123 sjhid dhi"
list2 = str2.split() #or list2 = str2.split(" ")
print list2
 
str3 = "www.google.com"
list3 = str3.split(".")
print list3
 
输出为:
 
['1', '2', '3', '4', '5']
['123', 'sjhid', 'dhi']
['www', 'google', 'com']

2. 列表转字符串

str4 = "".join(list3)
print str4
str5 = ".".join(list3)
print str5
str6 = " ".join(list3)
print str6

输出为:
wwwgooglecom
www.google.com
www google com

1. 字符串转列表
str1 = "hi hello world"
print(str1.split(" "))
输出:
['hi', 'hello', 'world']
 
2. 列表转字符串
l = ["hi","hello","world"]
print(" ".join(l))
输出:
hi hello world

1、字符串转为列表

str1 = 'a1b2'
ls1 = [str(i) for i in str1]
 
2、列表转为字符串

ls2 = ['1','a','2','b']
str2 = ''.join(ls2)


Python实现字符串反转的几种方法

第一种:使用字符串切片
result = s[::-1]


第二种:使用列表的reverse方法
l = list(s)
result = "".join(l.reverse())

当然下面也行
l = list(s)
result = "".join(l[::-1])


第三种:使用reduce
result = reduce(lambda x,y:y+x,s)


第四种:使用递归函数
def func(s):
    if len(s) <1:
        return s
    return func(s[1:])+s[0]
result = func(s)


第五种:使用栈
def func(s):
    l = list(s) #模拟全部入栈
    result = ""
    while len(l)>0:
        result += l.pop() #模拟出栈
    return result
result = func(s)

第六种:for循环
def func(s):
    result = ""
    max_index = len(s)-1
    for index,value in enumerate(s):
        result += s[max_index-index]
    return result
result = func(s)

python反转列表的三种方式

1、内建函数reversed()

li =[1, 2, 3, 4, 5, 6]
a = list(reversed(li))
print (a)

  注意:reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下


2、内建函数sorted()

sorted()语法

sorted(iterable[, cmp[, key[, reverse]]])
参数说明:

iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。


a=[1,2,3,4,5,6,7,8,9] 
c=sorted(a, reverse=True) 
print (c)
  注意:sorted()按降序排列,对于反转内容不是顺序排列的无效果,此处待改善。


3: 使用分片

a=[1,2,3,4,5,6,7,8,9] 
d=a[::-1] 
print (d) 


python列表或字符串内容的倒置方法

第一种比较笨的方法就是用递归,把列表第一个数据移到最后一个,依次循环,直到全部被移到后面,代码如下:
def rever(a):
    if a =='':
        return a
    else:
        return rever(a[1:])+a[0]
rever("12345")
结果为:

54321

  2. 第二种最简洁,用的是切片法。只需a[::-1]就可以了,

​其中第一个: 表示的是切片的区间,如果没有设定数值,默认是全部区间;

​第二个:表示的是切片的步数和方向,默认为切片方向为从前向后,默认步数为1.

​上面的-1,代表的就是从后向前,一次往前切一次,也就是刚好倒置列表。

​测试代码如下:
b = 123456
c = str(b)
c[::-1]
结果为:

'654321'

 可以利用这种方法来判断回文数,特别简单。if c[] = c[::-1]:


3. 第三种是python的内置函数,一个是reverse函数,一个是sort函数。


reverse函数。reverse()函数将列表的内容进行了反转

​借助这个特性,可以先将字符串转换成列表,利用reverse()函数进行反转后,再处理成字符串

​测试代码如下:
b = 123456
c = list(str(b))
c.reverse()
print(c)
输出为:


['6', '5', '4', '3', '2', '1']
 sort函数和sorted函数。其实放在这里并不合适(因为上面全是关于倒置的,而这个是关于排序的,它会按照一定的顺序重组你的数据),不过既然这个函数是用来排序的,也一块儿说明了。
其形式如下:
sorted(iterable[,cmp[,key[,reverse]]])
list.sort(L, key=None, reverse=False) 

其中sorted函数的参数含义如下:
iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

sort函数的参数含义:L代表要排序,key代表的是用于排序的比较元素,reverse同上面一致。


总体来看,sort只能用于列表的排序,效率也更快,消耗的内存较小,而且是直接对列表进行操作,所以会改变列表的原始值。

​而sorted函数的可以应用于各种数据结构,范围更加广泛,不过它会调用一个新的数据结构来进行操作,不会更改原数据,所以效率会略低一点。
 

<think>我们正在讨论Python字符串列表反转方法。根据用户提供的引用,我们可以总结如下: 对于列表(List): 1. 使用列表的`reverse()`方法可以原地反转列表(修改原列表)。 ```python numbers = [1, 2, 3, 4] numbers.reverse() print(numbers) # 输出:[4, 3, 2, 1] [^1] ``` 2. 使用切片操作`[::-1]`可以创建一个反转后的新列表(不修改原列表): ```python numbers = [1, 2, 3, 4] reversed_numbers = numbers[::-1] print(reversed_numbers) # 输出:[4, 3, 2, 1] ``` 对于字符串(String): 字符串是不可变对象,因此不能原地修改。反转字符串的方法有: 1. 使用切片操作`[::-1]`(最简洁): ```python s = "Hello, World!" reversed_s = s[::-1] print(reversed_s) # 输出:"!dlroW ,olleH" [^3] ``` 2. 使用循环(从后往前遍历字符并连接): ```python s = "the crazy programmer" reversed_s = "" i = len(s)-1 while i>=0: reversed_s += s[i] i -= 1 print(reversed_s) # 输出:remmargorp yzarc eht [^2] ``` 3. 使用递归(不推荐用于长字符串,可能导致栈溢出): ```python def reverse_string(s): if len(s) == 0: return s else: return reverse_string(s[1:]) + s[0] s = "Hello" print(reverse_string(s)) # 输出:olleH ``` 4. 使用`reversed()`函数`join()`方法: ```python s = "Python" reversed_s = ''.join(reversed(s)) print(reversed_s) # 输出:nohtyP ``` 5. 使用列表的`reverse()`方法(先将字符串转为列表反转后再转回字符串): ```python s = "123456789" l = list(s) l.reverse() reversed_s = ''.join(l) print(reversed_s) # 输出:987654321 [^5] ``` 6. 使用栈(利用栈的后进先出特性): ```python def reverse_string(s): stack = list(s) reversed_s = "" while stack: reversed_s += stack.pop() return reversed_s s = "abc" print(reverse_string(s)) # 输出:cba ``` 7. 使用reduce函数(需要导入functools模块): ```python from functools import reduce s = "hello" reversed_s = reduce(lambda acc, c: c + acc, s, "") print(reversed_s) # 输出:olleh ``` 8. 使用列表推导式(与循环类似): ```python s = "hello" reversed_s = ''.join([s[i] for i in range(len(s)-1, -1, -1)]) print(reversed_s) # 输出:olleh ``` 总结: - 列表反转:推荐使用`reverse()`(原地)或切片`[::-1]`(创建新列表)。 - 字符串反转:推荐使用切片`[::-1]`(最简洁高效)或`''.join(reversed(s))`(可读性好)。 注意事项: - 字符串反转的各种方法在性能上可能有差异,切片操作通常是最快的。 - 对于长字符串,避免使用递归循环拼接(因为字符串不可变,每次拼接会创建新字符串),建议使用切片或`reversed`配合`join`。 §§相关问题§§ 1. 字符串反转列表反转在原理上有什么区别? 2. 为什么字符串反转不能使用`reverse()`方法? 3. 反转操作的时间复杂度是多少? </think>### Python字符串列表反转方法详解 针对字符串列表反转操作,Python提供了多种高效方法。以下总结基于引用内容[^1][^2][^3][^4][^5]: --- #### 一、列表反转方法 1. **`reverse()`方法**(原地修改) 直接修改原列表,无返回值: ```python numbers = [1, 2, 3, 4] numbers.reverse() print(numbers) # 输出:[4, 3, 2, 1] [^1] ``` 2. **切片操作**(创建新列表) 通过步长`-1`实现反转: ```python numbers = [1, 2, 3, 4] reversed_numbers = numbers[::-1] # 新对象 [4, 3, 2, 1] ``` 3. **`reversed()`函数**(生成迭代器) 需转换为列表: ```python reversed_iter = reversed(numbers) print(list(reversed_iter)) # [4, 3, 2, 1] ``` --- #### 二、字符串反转方法 1. **切片操作**(最简洁高效) 步长`-1`直接反转: ```python text = "Python" reversed_text = text[::-1] # 输出:"nohtyP" [^3] ``` 2. **`reversed()` + `join()`** 适用于迭代处理: ```python reversed_text = ''.join(reversed(text)) # "nohtyP" [^5] ``` 3. **循环遍历法**(基础实现) 从末尾向前拼接字符: ```python reversed_text = "" for i in range(len(text)-1, -1, -1): reversed_text += text[i] # 逐步拼接 [^2] ``` 4. **递归法**(不推荐长字符串) 递归反转子串: ```python def reverse_str(s): return s if len(s) <= 1 else reverse_str(s[1:]) + s[0] print(reverse_str("hello")) # "olleh" ``` 5. **单词级反转**(保留单词顺序) 先拆分再反转单词: ```python sentence = "Hello World" reversed_words = ' '.join(word[::-1] for word in sentence.split()) print(reversed_words) # "olleH dlroW" [^4] ``` --- #### 三、关键区别与性能对比 | 特性 | 列表 | 字符串 | |--------------------|--------------------------------|---------------------------| | **是否可变** | 可变(支持原地修改) | 不可变(始终生成新对象) | | **最优方法** | `reverse()`(原地) | 切片`[::-1]`(高效简洁) | | **时间复杂度** | $O(n)$ | $O(n)$ | | **内存消耗** | 原地操作零额外内存 | 生成新对象需$O(n)$空间 | > **提示**:字符串操作优先选择切片`[::-1]`,因其在速度简洁性上最优;列表若需保留原数据则用切片,否则用`reverse()`省内存[^3][^5]。 --- #### 完整示例 ```python # 列表反转 original_list = [1, 2, 3, 4] original_list.reverse() # 原地反转 print("反转列表:", original_list) # [4, 3, 2, 1] # 字符串反转 text = "Python" print("切片反转:", text[::-1]) # nohtyP print("reversed反转:", ''.join(reversed(text))) # nohtyP ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值