在嵌套列表中反转字符串而不进行切片或反转

2024-10-02 18:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的列表是

TheTextImage = [["111000"],["222999"]]

如何在这个列表中循环创建一个新的

NewTextImage = [["000111"],["999222"]]

可以使用[:],但不能使用[::-1],并且不能使用reverse()


Tags: 列表reversethetextimagenewtextimage
3条回答

如果不能使用任何标准功能,如reversed[::-1],则可以在循环中使用collections.dequedeque.appendleft。然后使用列表理解将逻辑应用于多个项目。你知道吗

from collections import deque

L = [["111000"], ["222999"]]

def reverser(x):
    out = deque()
    for i in x:
        out.appendleft(i)
    return ''.join(out)

res = [[reverser(x[0])] for x in L]

print(res)

[['000111'], ['999222']]

注意你可以使用一个列表,但是附加到列表的开头是低效的。你知道吗

你知道如何把一个序列一个接一个地复制到另一个序列,对吗?你知道吗

new_string = ''
for ch in old_string:
    new_string = new_string + ch

如果要反向复制序列,只需将新值添加到左侧而不是右侧:

new_string = ''
for ch in old_string:
    new_string = ch + new_string

这是你唯一需要的技巧。你知道吗


现在,这不是超高效的,因为字符串串联需要二次时间。您可以通过使用collections.deque(可以在常量时间中附加到左边)并在末尾调用''.join来解决这个问题。但我怀疑你的老师是否期望你这么做。就用简单的方法。你知道吗


当然,您必须循环TextImage将此应用于列表中每个子列表中的每个字符串。这可能就是他们希望你使用[:]的原因。但这很简单,只是在列表上循环。你知道吗

您可以不使用[::-1],但可以将每个范围索引乘以-1。你知道吗

t = [["111000"],["222999"]]


def rev(x):
    return "".join(x[(i+1)*-1] for i in range(len(x)))

>>> [[rev(x) for x in z] for z in t]
[['000111'], ['999222']]

如果您可以使用step中的range参数,可以做一个示例建议:

def rev(x):
    return ''.join(x[i-1] for i in range(0, -len(x), -1))

相关问题 更多 >