2017-06-06 4 views
2
x1 = [5, 5] 
x2 = [1, 5, 5, 2] 
x3 = [5, 5, 1, 2, 5, 5] 
x4 = [5, 5, 1, 5, 5, 2, 5, 5] 
x5 = [5, -5] 
x6 = [1, 2, 3, 4] 
x7 = [5, 5, 5, 5, 5, 5] 

重複値のいずれかを削除するにはどうすればいいですか?お互いの隣にあるのリストを削除するにはどうすればよいですか?リスト内で隣り合っている重複値のいずれかを削除するにはどうすればよいですか?

隣接している、重複する値のすべて1が除去された後、彼らは次のようになります。

x1 = [5] 
x2 = [1, 5, 2] 
x3 = [5, 1, 2, 5] 
x4 = [5, 1, 5, 2, 5] 
x5 = [5, -5] 
x6 = [1, 2, 3, 4] 
x7 = [5] 
+5

行内に3つの値があるとどうなりますか? –

+0

それはまだ重複していますが、同じものの2つの値は削除され、残りのものはそのまま残ります。編集:追加x7 –

+0

これはあなたの宿題ですか? –

答えて

3

三つ以上の行の値と単一の値のみが望まれるがあることができます。

from itertools import groupby 

def remove_consecutive_duplicates(iterable): 
    return [v for v, g in groupby(iterable)] 
4

理解はどうしたら簡単なリスト:

>>> x = [5, 5, 1, 5, 2, 5, 5] 
>>> [a for a, b in zip(x, x[1:]) if a != b] + [x[-1]] 
[5, 1, 5, 2, 5] 

あなたは基本的に取っています次の要素が異なる場合は各要素に加えて最後の要素を加えます。

+0

誰かが何の努力もしていない質問者に宿題の答えを出すのは嫌です。 –

+0

@JamesKPolkこれは宿題がない(たぶん学ぶ)ことを除いて、通常は同様ですが、ハーフベークの解決策を持たないことを意味する半分の自明の解決策を求めます。 – Uriel

+0

確かに良い答えです。 –

1

あなたはあなたのリストの上にちょうどループ前の値を追跡しながらできる、とだけ次を保ちます値が異なる場合:

def uniquefy_conseq_vals(my_list): 
    prev = None 
    new_list = [] 
    for ele in my_list: 
     if ele != prev: 
      new_list.append(ele) 
     prev = ele 
    return new_list 

if __name__ == "__main__": 

    x1 = [5, 5] 
    x2 = [1, 5, 5, 2] 
    x3 = [5, 5, 1, 2, 5, 5] 
    x4 = [5, 5, 1, 5, 5, 2, 5, 5] 
    x5 = [5, -5] 
    x6 = [1, 2, 3, 4] 
    x7 = [5, 5, 5, 5, 5, 5] 

    print uniquefy_conseq_vals(x1) 
    print uniquefy_conseq_vals(x2) 
    print uniquefy_conseq_vals(x3) 
    print uniquefy_conseq_vals(x4) 
    print uniquefy_conseq_vals(x5) 
    print uniquefy_conseq_vals(x6) 
    print uniquefy_conseq_vals(x7) 
関連する問題