2016-07-14 20 views

回答

0

一種選擇將是集團的價值觀爲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. 然後我切片列表students[:i] + students[i + 1:]創造一個又一個在內存中包含除​​
  3. 原來的所有元素我檢查,看看是否存在具有相同[1]指數新創建的列表中的任何項目價值與​​相同。如果是的話,我將i_x[0]的值附加到第三個包含結果的列表中。
  4. 我這樣做的原因是最初在students列表中。

誰能提供上述列表理解?

+0

它不是O(n^2)(n平方)的複雜度嗎?謝謝。 – alecxe

+0

@alecxe我不明白爲什麼這樣:'print([x [0] for y in(students [:i] + students [i + 1:])for i,x in enumerate(students)if x [1] == y [1]])'不起作用.. –