所以,我一般都是编程新手,我只是想知道是否可以根据另一个列表的位置排序列表,而不是实际的整数本身?
#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
非常感谢任何帮助!
答案 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']