list_a の前のリストの反転リストである list_a のすべてのリストを削除するにはどうすればよいですか?
list_a = [[1,2,3],[5,4],[4,5],[3,2,1]]
与えるべき
[[1,2,3],[5,4]]
少し難解ですが、私の意見では、これを実現するためのエレガントな方法は次のとおりです。
[v for k, v in enumerate(list_a) if v[::-1] not in list_a[:k]]
重複も削除する場合は、次のように変更します。
[v for k, v in enumerate(list_a) if v[::-1] not in list_a[:k] and v not in list_a[:k]]
他の回答はすでにある程度最適化されています。これは、読みやすく理解しやすいように設計された「素朴な」アプローチです。set または dict を使用した回答よりも遅くなりますが、リストのサイズが大きくない場合はおそらく問題になりません。
list_a = [[1, 2, 3], [4, 5], [5, 4], [3, 2, 1]]
list_b = []
for item in list_a:
if not list(reversed(item)) in list_b:
list_b.append(item)
ハッシュを使用してそれを行うことができます。
a=[[1,2,3],[5,4],[4,5],[3,2,1]]
d={};b=[]
for i in a:
try:
d[str(i)]+=1
except KeyError:
d[str(i)]=0;d[str(i[::-1])]=0
b.append(i)
print b
出力:
[[1,2,3],[5,4]]
これを実現するための非常に簡単な方法は次のとおりです。
ここでは、1 つの要素が出力リストに複数回出現することはないと仮定しています。
#!/usr/bin/env python
list_a = [[1,2,3],[5,4],[4,5],[3,2,1]]
list_out = []
for i in list_a:
i_r = i[::-1] # reverse the element
# check that it doesn't appear in the list, reversed or not...
if i_r not in list_out and i not in list_out:
list_out.append(i)
print "out: " + str(list_out)
重複したくないだけで、逆の要素を削除したい場合:
#!/usr/bin/env python
list_a = [[1,2,3],[5,4],[4,5],[3,2,1]]
list_out = []
for i in list_a:
i_r = i[::-1]
if i_r not in list_out:
list_out.append(i)
print "out: " + str(list_out)
そして、これら 2 つの関数を次の入力と比較します。
list_a = [[1,2,3], [5,4], [4,5], [3,2,1], [1,2,3], [5,4]]
最初のメソッドからの出力:
[[1, 2, 3], [5, 4]]
秒からの出力:
[[1, 2, 3], [5, 4], [1, 2, 3], [5, 4]]