我有一个列表:
list1 = [1 2 1 ... 1 399]
还有一个:
list2 = [5 4 3 4 2 0]
list1包含来自0 to 399
的数字,其中包含重复项,其长度为5000
,list2
的长度为400
,每个list2
元素的索引代表list1
中元素的数量,这就是400
长度的原因。
我想返回一个长度为5000
的列表(与list1相同),并检查每个元素,如果list1的第一个元素是1,我想将list2中的索引1添加到新列表中,在这种情况下是4,
所以新列表应该是
new_list = [ 4 , ...]
所有项目的等等,直到它出现
我尝试了这个但是没有工作:
labels=labels.tolist()
labels2=labels2.tolist()
new=list()
for i in range(len(labels1)):
for item,index in enumerate(labels2):
# print(item)
if labels1[i] == index :
# print (str(labels2[i]).index)
new.append(item)
print(new)
答案 0 :(得分:3)
您需要根据list1中的值为list1的每个值索引到list2。您可以从for循环中构建它:
new_list = []
for k in list1:
new_list.append(list2[k]) #lookup the value in list2 at the index given by list1
这更像是用列表理解来表达的:
new_list = [list2[k] for k in list1]
答案 1 :(得分:2)
列表理解。
n_l = [list2[i] for i in list1]
答案 2 :(得分:0)
非常快速有效的解决方案之一就是使用numpy模块:
String response = JOptionPane.showInputDialog(null, "Question", JOptionPane.QUESTION_MESSAGE);
设置:
In [46]: a1[l2]
Out[46]: array([4, 3, 1, 1, 1, 2])
答案 3 :(得分:-1)
从list2项目的索引到项目itedelf构建一个字典,然后将列表1项目传递到字典中:
new_dict={}
for i,v in enumerate(list2):
new_dict[i]=v
new_list=[]
for i in list1:
new_list.append(new_dict[i])
print new_list