2016-07-14 6 views
-2
students=[['Ash',85.25],['Kai',85.25],['Ray',75],['Jay',55.5]] 

output:Ash 
     Kai 
私は、タスクを解決しようとしていると私は誰もが1はそれを

印刷重複した値名の両方

を行うことができますどのように私を説明することができますしたいものを得ていないのですpython.Iに新たなんだ

答えて

0

1つのオプションは、defaultdict(list)にグループ化する値のようになります。

>>> from collections import defaultdict 
>>> 
>>> students = [['Ash',85.25],['Kai',85.25],['Ray',75],['Jay',55.5]] 
>>> d = defaultdict(list) 
>>> for value, key in students: 
...  d[key].append(value) 
... 
>>> for value in d.itervalues(): 
...  if len(value) > 1: 
...   print(value) 
... 
['Ash', 'Kai'] 
0

私はそのようにそれを行うだろう:

students = [['Ash', 85.25], ['Kai', 85.25], ['Ray', 75], ['Jay', 55.5]] 

common_names = [] 
for i, i_x in enumerate(students): 
    for i_y in students[:i] + students[i + 1:]: 
     if i_x[1] == i_y[1]: 
      common_names.append(i_x[0]) 

print(common_names) 
#['Ash', 'Kai'] 

# or if you want it to print every entry in a single line: 
print('\n'.join(x for x in common_names)) 
#Ash 
#kai 

説明:

  1. 元のリストstudentsからオブジェクトを取得します。オブジェクトは、例えば、最初の繰り返しで​​とその['Ash', 85.25]です。
  2. その後、私は私がすべての項目が同じ[1]インデックスを持つ、新しく作成されたリストにあるかどうかをチェックし​​
  3. から離れて、元の1のすべての要素を含むメモリ内の別のものを作成するために、リストstudents[:i] + students[i + 1:]をスライス値は​​の値です。はいの場合は、結果を保持する3番目のリストにi_x[0]の値を追加します。
  4. これは、もともとstudentsのリストにある数の要素に対して行います。

誰もが上記のためのリストの内包表記を提供することはできますか?

+0

O(n^2)(n-squared)の複雑さではありませんか?ありがとう。 – alecxe

+0

@alecxeなぜ、これは理解できないのですか?x [1]ならx(学生[:i] +学生[i + 1:]) == y [1]]) 'は動作しません.. –