2011-12-28 3 views
0

C#에는 구조적 쿼리식이 있으며 컬렉션 및 배열로 재생하는 것이 재미 있습니다. 그런 모듈이 파이썬에 존재하는지 잘 모르겠습니다. 그러나 SQE는 람다를 구현, 람다 식 또한 파이썬에 존재 : Python 프로그래밍, 함수 작성 또는 내장 함수 찾기 어려움

이의 내가 수집에서만 고유 한 값을 얻을 필요가 상상 해보자

c# ex: 

List<int> arr = new List<int> {0,1,2,3,4,5,6,7,8,9}; 
      List<int> arr2 = new List<int> { 2, 3, 4 }; 
      arr.AddRange(arr2); 

      var qry = arr.Distinct(); 
      foreach (var x in qry) 
       Console.WriteLine(x); 
python ex: 

arr = range(10) + [2,4,3] 
def distinct(x): 
    arr2 = [] 
    for y in x: 
     if not y in arr2: 
      arr2.append(y) 
    return arr2 

for x in distinct(arr): 
    print x, 

파이썬 솔루션 어쩌면 느린 검사가 너무 많이 발생하는 것처럼.

+0

질문 하나당 하나만 질문하십시오. 그러면 모든 답을 비교할 수 있습니다. 다른 질문을 할 수 있습니다. – phihag

답변

3

파이썬은 내장 된 지원 sets을 위해 : 세트 순서없이 자연 것을

arr = range(10) + [2,4,3] 
for x in set(arr): 
    print (x) 

참고; 얻을 수있는 순서는 집합의 구현에 따라 다르며 변경 될 수 있습니다. 당신이 순서를 유지해야하는 드문 경우에, 당신은 다음과 같이 대신 목록 (O(n))의, (runtime inO(log n), 또는 상각도 O(1)로) 세트에서 찾도록 distinct 방법을 적용해야합니다

def distinct(iterable): 
    seen = set() 
    for el in iterable: 
     if el not in seen: 
      seen.add(el) 
      yield el 

for x in distinct(arr): 
    print (x) 

그런데 distinct의 구현은 generator의 예입니다. 즉, 값은 사전에 큰 목록에 저장되는 대신 시간에 따라 계산됩니다. 기존 목록 (크기 재조정 가능 배열)을 원하면 list (list(distinct(arr))과 같이)으로 전화하십시오.

1

나는 원래 순서, 당신은 세트 또는 y가 이미 사용할 수있는 파이썬에서 목록의 고유 한 값을 얻으려면

arr = range(10) + [2,4,3] 
def distinct(x): 
    ToRet = [] 
    AuxDict = {} 
    for y in x: 
     if y not in AuxDict: 
      AuxDict[y] = 0 
      ToRet.append(y) 
    return ToRet 

for x in distinct(arr): 
    print x, 
2

나열되어있는 경우 fastly 테스트하기위한 딕셔너리를 사용한다을 유지하려는 생각 세트() :

>>> lst = range(10) + [2,4,3] 
>>> lst 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 3] 
>>> set(lst) 
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])