Python 在不影响数值的情况下反转字符串列表

Python 在不影响数值的情况下反转字符串列表,python,Python,我有一个字符串列表 arr = ['17 -> 16 -> 1 -> 8 -> 0', '5 -> 2 -> 3 -> 6 -> 0'] 我想反转字符串,我使用以下代码: x = arr[::-1] x = x.replace(">-", "->") x = x[5:] 但结果是: arr = ['0 -> 8 -> 1 -> 61 -> 71', '0 -> 6 -> 3 -> 2 -&g

我有一个字符串列表

arr = ['17 -> 16 -> 1 -> 8 -> 0', '5 -> 2 -> 3 -> 6 -> 0']
我想反转字符串,我使用以下代码:

x = arr[::-1]
x = x.replace(">-", "->")
x = x[5:]
但结果是:

arr = ['0 -> 8 -> 1 -> 61 -> 71', '0 -> 6 -> 3 -> 2 -> 5']
鉴于,我需要输出为:

arr = ['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']

您应该在箭头字符上拆分字符串,反转,然后将其重新连接。这项工作:

[' -> '.join(reversed(a.split(' -> '))) for a in arr]
说明:

[x.split(“->”[::-1]表示arr中的x]
将字符串拆分为
->
处的字符串子列表,并使用列表将其反转

join(..)将内部列表连接回字符串

arr = ['17 -> 16 -> 1 -> 8 -> 0', '5 -> 2 -> 3 -> 6 -> 0']

sub = [" -> ".join(x.split(" -> ")[::-1]) for x in arr]

print(sub)
输出

['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']

已编辑:删除过于复杂的剥离,并在查看后调整拆分文本


最基本的方法是将字符串按空格分开,将其反转,然后将其重新粘在一起

" ".join(reversed("1 -> 2 -> 3 -> 4 -> 5".split()))
那就为每一个人做点什么吧

for a in arr:
    print(" ".join(reversed(a.split())))

作为替代方案,
regex
基于从字符串中提取数字:

>>> arr = ['17 -> 16 -> 1 -> 8 -> 0', '5 -> 2 -> 3 -> 6 -> 0']

>>> [' -> '.join(re.findall('\d+', a)[::-1]) for a in arr]
['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']
如果数字之间的模式不同,这将有帮助


另外,在不使用
倒档的情况下,的版本稍有不同,如下所示:

#                                 v  to reverse the list
>>> [' -> '.join(a.split(' -> ')[::-1]) for a in arr]
['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']

您可以使用
map

arr = ['17 -> 16 -> 1 -> 8 -> 0', '5 -> 2 -> 3 -> 6 -> 0']
final_list = list(map(lambda x:' -> '.join(x.split(' -> ')[::-1]), arr))
输出:

['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']

为什么要替换(“>-”,“->”)
arr[:-1]
被忽略,因为
x
在程序的其余部分被忽略。编辑代码。我的错!!即使Python3已经克服了性能问题,看到
map
filter
lambda
函数骚扰,我也会毛骨悚然。@schwobaseggl:在任何情况下,Python3都没有“克服”性能问题(这只会使它们变得懒惰,因此当结果需要是除
列表
之外的其他内容时,您的临时性就更少了)。
map
/
过滤器
使用非C级内置回调函数调用时,总是比可以内联工作的等效listcomp/genexpr慢(完全避免了函数调用开销).由于内联
lambda
的任何使用在定义上都是内联的,因此等效的非
lambda
listcomp/genexpr始终获胜(并且通常较短/更易于引导)极微小的实现细节说明:给定
str.join
list
-如果输入不是
list
tuple
,则
的惰性特性reversed
在这里没有帮助,调用它并将结果转换回
list
的开销是有害的;
['->'.join(a.split('->'))[::-1])对于in-arr]
将获得相同的结果,并且(在本地测试中)运行时间将减少约30%(至少在我的64位CPython 3.6安装中是这样)。无论是哪种版本,都将进行投票;这两种版本都是完全Pythonic的。
['0 -> 8 -> 1 -> 16 -> 17', '0 -> 6 -> 3 -> 2 -> 5']