2017-07-10 11 views
0

は私の最小限の作業例です:2つの要素の関係:Pythonでどのように悪用するのですか?だからここ

# I have a list 
list1 = [1,2,3,4] 
#I do some operation on the elements of the list 
list2 = [2**j for j in list1] 
# Then I want to have these items all shuffled around, so for instance 
list2 = np.random.permutation(list2) 

#Now here is my problem: I want to understand which element of the new list2 came from which element of list1. I am looking for something like this: 

list1.index(something) 

# Basically given an element of list2, I want to understand from where it came from, in list1. I really cant think of a simple way of doing this, but there must be an easy way! 

あなたは私の簡単な解決策を提案してくださいことはできますか?これは最小限の作業例ですが、主な点はリストがあることです。要素についていくつかの操作を行い、これらを新しいリストに割り当てます。そして、アイテムはすべてシャッフルされ、どこから来たのか理解する必要があります。

+4

'2 ** x'を' log2(x) 'と逆にして、変更前の値を知ることができます。すべての操作が可逆的であるわけではありませんが、これは常に機能するとは限りません。 – byxor

+0

(orig、new)値を持つタプルのリストである可能性がありますか?あなたがそれらをシャッフルすると、そのようになります。 –

+1

おそらく:https://stackoverflow.com/questions/39832773/getting-previous-index-values-of-a-python-list-items-after-shuffling –

答えて

1

列挙し、誰もが言ったようには最良の選択肢ですが、あなたが知っている場合、代替がありますマッピング関係。マッピング関係の逆を行う関数を書くことができます。 (元の関数がエンコードする場合など)。 次に、decoded_list = map(decode_function,encoded_list)を使用して新しいリストを取得します。次に、このリストと元のリストを比較することで、目標を達成できます。

のコード内でのencode_functionを使用して同じリストが変更されていることが確かな場合は、Enumerateが優れています。 ただし、この新しいリストを別の場所からインポートする場合は、ウェブサイト上のテーブルから、私のアプローチが行く方法です。あなたのコードに基づいて

2

あなたは順列リスト/インデックスを使用することができます。

# I have a list 
list1 = [1,2,3,4] 
#I do some operation on the elements of the list 
list2 = [2**j for j in list1] 
# Then I want to have these items all shuffled around, so for instance 
index_list = range(len(list2)) 
index_list = np.random.permutation(index_list) 
list3 = [list2[i] for i in index_list] 

、その後、input_elementで:

answer = index_list[list3.index(input_element)] 
1

# I have a list 
list1 = [1,2,3,4] 
#I do some operation on the elements of the list 
list2 = [2**j for j in list1] 
# made a recode of index and value 
index_list2 = list(enumerate(list2)) 
# Then I want to have these items all shuffled around, so for instance 
index_list3 = np.random.permutation(index_list2) 
idx, list3 = zip(*index_list3) 

#get the index of element_input in list3, then get the value of the index in idx, that should be the answer you want. 
answer = idx[list3.index(element_input)] 
0
def index3_to_1(index): 
    y = list3[index] 
    x = np.log(y)/np.log(2) # inverse y=f(x) for your operation 
    return list1.index(x) 

これは、あなたがlist2上で行っている操作が可逆的であることを想定します。また、list1の各要素は一意であると仮定します。

関連する問題