-2

如何在列表索引和字符串之间进行排序?

def shuffle(plain_txt,mylist):
    return ''.join([plain_txt[i] for i in mylist])
     
    
def resorting(shuffle_txt,mylist):
    return shuffle(shuffle_txt, [mylist.index(0)])

print(shuffle('abcd',[2,1,3,0]))
print(resorting('cbda',[2,1,3,0]))

第一个 shuffle 函数它将根据列表生成 shuffle 字符串,例如 (str) abcde: (list) [0,4,3,2,1] 然后输出是 aedcb,所以我创建了函数resorting,它将返回字符串序列回到随机播放之前。

4

2 回答 2

0

假设这resorting()是为了扭转什么shuffle(),一个紧凑的方法是:

def resorting(text, indexes):
    d = {i: c for c, i in zip(text, indexes)}
    return ''.join(d[i] for i in sorted(indexes))
于 2020-06-23T21:04:47.540 回答
0

如果resorting()应该撤消所做的shuffle()操作,则需要遍历字符串中的字符和列表中的索引。然后,您必须将字符分配给结果字符串中的该索引。

def resorting(shuffle_txt, mylist):
    result_list = ['_'] * (max(mylist) + 1)
    for c, index in zip(shuffle_txt, mylist):
        result_list[index] = c
    return ''.join(result_list)

请注意,并非所有 shuffle 都可以完全反转。如果mylist 缺少任何索引,则这些字符将不会出现在结果字符串中,并且无法知道它们最初是什么。resorting()放在_那些不为人知的地方。

于 2020-06-23T21:01:10.933 回答