将另一个列表中的列表转换为字符串,然后反转该字符串

2024-06-16 10:59:33 发布

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

我对Python编程(以及一般编程)还比较陌生,我们被要求开发一个函数,通过重新排列文本来加密字符串。我们得到这个作为测试:

encrypt('THE PRICE OF FREEDOM IS ETERNAL VIGILENCE', 5)
'SI MODEERF FO ECIRP EHT ECNELIGIV LANRETE'

我们必须确保它适用于任何长度的弦。在被卡住之前我已经做到了:

##Define encrypt
def encrypt(text, encrypt_value):

##Split string into list

text_list = text.split()

##group text_list according to encrypt_value    

split_list = [text_list[index:index+encrypt_value] for index in xrange\
          (0, len(text_list), encrypt_value)]

如果我现在打印结果,这将给我:

encrypt("I got a jar of dirt and you don't HA", 3)
[['I', 'got', 'a'], ['jar', 'of', 'dirt'], ['and', 'you', "don't"], ['HA']]

所以我需要将列表中的每个列表组合成一个字符串(我认为是''连接(文本)?),用[::-1]反转它,然后将整个东西连接到一个字符串中。但我该怎么做呢?你知道吗


Tags: andof字符串textyouindexvalue编程
3条回答

要组合元素,可以尝试使用reduce:

l = [['I', 'got', 'a'], ['jar', 'of', 'dirt'], ['and', 'you', "don't"], ['HA']]
str = reduce(lambda prev,cur: prev+' '+reduce(lambda subprev,word: subprev+' '+word,cur, ''), l, '')

它将导致:

"  I got a  jar of dirt  and you don't  HA"

如果要删除多余的空格:

str.replace('  ',' ').strip()

这个reduce-use可以很容易地修改,以便在组合每个子列表的元素之前将其反转:

str = reduce(lambda prev,cur: prev+' '+reduce(lambda subprev,word: subprev+' '+word,cur[::-1], ''), l, '')

或者在将所有子字符串连接在一起之前反转组合的子字符串:

str = reduce(lambda prev,cur: prev+' '+reduce(lambda subprev,word: subprev+' '+word,cur, '')[::-1], l, '')
b = [['I', 'got', 'a'], ['jar', 'of', 'dirt'], ['and', 'you', "don't"], ['HA']]

print "".join([j[::-1]+' ' for i in b for j in reversed(i)])

a tog I trid fo raj t'nod uoy dna AH 

这就是你想要的。。。你知道吗

您只需使用一些嵌套的列表理解就可以完成所需的工作。你知道吗


例如,你已经有了

split_list = [['I', 'got', 'a'], ['jar', 'of', 'dirt'], ['and', 'you', "don't"], ['HA']]

你现在要做的是用列表理解倒转每个单词的三元组,例如:

reversed_sublists = [sublist[::-1] for sublist in split_list]
// [['a', 'got', 'I'], ['dirt', 'of', 'jar'], ["don't", 'you', 'and'], ['HA']]

然后反转每个子列表中的每个字符串

reversed_strings = [[substr[::-1] for substr in sublist] for sublist in split_list]
// [['a', 'tog', 'I'], ['trid', 'fo', 'raj'], ["t'nod", 'uoy', 'dna'], ['AH']]

然后像你说的那样,把它们都连接起来

' '.join([' '.join(sublist) for sublist in reversed_strings])
// "a tog I trid fo raj t'nod uoy dna AH"

但是没有什么能说明你不能用一些嵌套同时做所有这些事情:

' '.join([' '.join([substring[::-1] for substring in sublist[::-1]]) for sublist in split_list])
// "a tog I trid fo raj t'nod uoy dna AH"

我个人更喜欢这种美学(事实上你不需要回到狭长空间),但我不确定它是否比Pablo的解决方案表现得更好。你知道吗

相关问题 更多 >