l1 = [1,2,2,2]
上記のリストでは、要素がl1 [0]で異なることがわかりました。 Pythonでその位置を見つける方法はありますか?アイテムが前のアイテムと異なるリスト内の位置を見つける方法はありますか?
l1.index(min(set(l1), key=l1.count))
EDIT:
l1 = [1,2,2,2]
上記のリストでは、要素がl1 [0]で異なることがわかりました。 Pythonでその位置を見つける方法はありますか?アイテムが前のアイテムと異なるリスト内の位置を見つける方法はありますか?
l1.index(min(set(l1), key=l1.count))
EDIT:
はこのお試しください
をラムダ式min(set(l1), key=l1.count)
は、リスト内の回数の最も少ない数を発生する要素が何であるかを教えてくれる。次に、l1.index
を使用して、リスト内のその要素の位置を把握します。
"TypeError: 'int'オブジェクトは反復可能ではありません" –
@ user3543300解決方法ありがとうございます。あなたはそれを説明できますか? –
ここで 'set(l1)'を評価する目的は何ですか? IMHO、あなたは 'set'部分をスキップして、まったく同じ出力を得ることができます。 –
この試し:あなたを仮定
l1 = [1,2,2,2]
for pos, i in enumerate(l1):
if l1.count(i)==1:
print pos
これはアイテムの変更については何も言いません。 2つの異なるアイテムだけを持つ長いリストは、多くの変化するポジションを持つことができます。あなたのコードに一致が見えません。 –
import numpy as np
UniqueList, indices = np.unique(l1, return_inverse=True)
print(UniqueList) #Unique elements in List l1
アレイ([1,2])
print(indices) #indices of element in l1 mapped to UniqueList
配列([0、1、1、1])
これを 'l = [1,2,2,3,3,1,1]'で実行すると '[1,2,3]'が表示されますが、これは明らかに誤りです。 –
正しいです。 UniqueListはリストl1から一意の要素を返します。したがって、UniqueListはarray([1,2,3])で、Indicesはarray([0,1,1,2,2,0,0])を返します。この場合、インデックスは一意の要素のインデックスを返します。 lの最初の要素は1であるため、インデックスでは0です(UniqueListのインデックスが0なので)。 4番目の要素は3、インデックスは2(ユニークリストの3のインデックスは2) –
をのインデックスを表示する必要がありますすべてアイテムが変更される発生:
l = [1 ,2, 2, 3, 3, 1, 1]
changes = [i for i, n in list(enumerate(l))[1:] if l[i] != l[i-1]]
print(changes)
> [1, 3, 5]
これは、リストの各項目を前の項目と単純に比較して、要素が異なる箇所をリストします。
itertools
レシピunique_everseen
の変更を使用して、リストの新しいエントリを追跡するソリューションです。あなたの例でそれを試してみ
from itertools import ifilterfalse
def unique_everseen(iterable, key=None, per_index=False):
"List unique elements, preserving order. Remember all elements ever seen.
Use per_index=True to return indices instead of elements."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
# unique_everseen('ABBCcAD', str.lower, True) --> 0 1 3 6
seen = set()
seen_add = seen.add
if key is None:
for index, element in enumerate(ifilterfalse(seen.__contains__, iterable)):
seen_add(element)
yield element if not per_index else index
else:
for index, element in enumerate(iterable):
k = key(element)
if k not in seen:
seen_add(k)
yield element if not per_index else index
:
list(unique_everseen(l1, per_index=True)) # returns [0, 1]
を明確にするために - リスト内のすべての項目は、1を除いて同じであり、あなたはその位置を見つけたいですか? – Mureinik
@Mureinikはいplease –
アイテムが変更されたすべての位置を検索したいと仮定すると、あなたの受け入れられた答えは '[1、2、2、1]'で動作しないか、[[1,2] 2,3,3]。 –