在python中,如果我的列表是
TheTextImage = [["111000"],["222999"]]
一个人如何遍历此列表以创建一个新的
NewTextImage = [["000111"],["999222"]]
可以使用[:]
但不能使用[::-1]
,并且不能使用reverse()
答案 0 :(得分:1)
您可能不使用[::-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
参数,可以提出AChampions建议:
def rev(x):
return ''.join(x[i-1] for i in range(0, -len(x), -1))
答案 1 :(得分:1)
您知道如何将一个序列一个接一个地复制到另一个序列吗?
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
并将其应用于列表中每个子列表中的每个字符串。这可能就是他们期望您使用[:]
的目的。但这很容易。它只是遍历列表。
答案 2 :(得分:0)
如果您不能使用reversed
或[::-1]
之类的任何标准功能,则可以循环使用collections.deque
和deque.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']]
请注意,您可以使用列表,但是将其附加到列表的开头效率不高。
答案 3 :(得分:0)
您可以使用reduce(lambda x,y: y+x, string)
来反转字符串
>>> from functools import reduce
>>> TheTextImage = [["111000"],["222999"]]
>>> [[reduce(lambda x,y: y+x, b) for b in a] for a in TheTextImage]
[['000111'], ['999222']]