如何使用整数Python对另一个列表进行排序

时间:2016-10-14 20:55:51

标签: python

所以,我一般都是编程新手,我只是想知道是否可以根据另一个列表的位置排序列表,而不是实际的整数本身?

#Here is my list to be sorted
sent = ['Ho','Hi','Hi','Ho','Hi','Ho','!','Hi']

#The positions I will sort by
pos = [1, 2, 2, 1, 1, 1, 3]

#The output I want is
sortlst = ['Hi','Ho','Ho','Hi','Hi','Hi','Ho','!']

我已尝试搜索解决此问题的方法,但找不到任何方法。列表推导等已经能够调用已发送的元素,但不能通过pos的实际整数,而不是位置。

for i in pos:
    T.append(sent[i])
recreate = " ".join(T) 
print (recreate)

运行此段将输出:

Ho Ho Ho Ho Ho Ho Ho Hi

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

sent = ['Hi', 'Ho', '!']
pos = [1, 2, 2, 1, 1, 1, 3]
recreate = [sent[i - 1] for i in pos]
print(recreate)
# ['Hi', 'Ho', 'Ho', 'Hi', 'Hi', 'Hi', '!']

但是,它要求您用“'标志”来描述表格。 (sent = ['Hi', 'Ho', '!']此处)将按数字顺序匹配。 1到'嗨',2到' Ho'和3到'!'等

答案 1 :(得分:0)

我将对我提出的解决方案做一些假设。

  • pos有7个元素但sortlst有8个。我认为这是一个错字。
  • 您将sent的每个唯一元素与基于其排序值的整数相关联。但请注意,你排序'!' as 'Ho'之后,即使它是之前的,也是按字典顺序排列的。除非你提出替代方案,否则我将使用字典顺序。

因此,post = [1,2,3]告诉我:

  

给我一​​个数组,其中包含sent的第一,第二和第三个唯一排序值。

记住这个定义:

>>> sent = ['Ho','Hi','Hi','Ho','Hi','Ho','!','Hi']
>>> pos = [1, 2, 2, 1, 1, 1, 3]
>>> elements = sorted(set(sent))
>>> elements
['!', 'Hi', 'Ho']
>>> [elements[i - 1] for i in pos]
['!', 'Hi', 'Hi', '!', '!', '!', 'Ho']