2013-04-25 2 views
3

저는 파이썬을 처음 접했고로드 블록을 쳤습니다. 각 줄에 하나의 목록이 들어있는 파이썬 목록이 있습니다. 기본적으로 목록간에 값을 공유하는 목록을 결합하고 싶습니다. 예를 들어, 아래에 무엇을 내 파이썬 목록이 순간에 보이고 추가 명령이 실행 된 후 데이터가 어떻게 보이길 원합니다.공유 목록과 함께 공유 목록과 함께 파이썬 목록을 결합하는 방법

저는 이런 종류의 문제가 세트와 교차로에 이상적이라는 것을 알고 있지만 제대로 작동하지 못했습니다. 나는 또한 인덱스를 사용하여 게시물을 보았고 그것은 나를 위해 일하지도 않았다.

목록이 보이는 무엇과 같은 :

[ 
    ['mary', 'bob', 'tom', 'home', 'school', 'work'], 
    ['bill', 'vacation'], 
] 

답변

-1
#original list 
lists = [ 
     ['mary', 'home'], 
     ['mary', 'school'], 
     ['mary', 'work'], 
     ['bob', 'home'], 
     ['bob', 'school'], 
     ['bob', 'work'], 
     ['tom', 'work'], 
     ['tom', 'school'], 
     ['tom', 'home'], 
     ['bill', 'vacation']] 

#remove sublists from lists 
listTemp = [] 
for list in lists: 
    for item in list: 
     listTemp.append(item) 

#get items from list that have duplicates 
listMultiple = [] 
seen = set() 
seen_add = seen.add 
setTemp = set(x for x in listTemp if x in seen or seen_add(x)) 
for item in setTemp: 
    listMultiple.append(item) 

#get items from list that do not have duplicates 
listSingle = [x for x in listTemp if listTemp.count(x) == 1] 

print listMultiple 
# >>> listMultiple 
# ['school', 'work', 'tom', 'home', 'bob', 'mary'] 

print listSingle 
# >>> listSingle 
# ['bill', 'vacation'] 
# lists = [listMultiple, listSingle] 
+0

Lars에게 감사드립니다. 나는 당신이 싱글과 멀티플을 어떻게 분리 하는지를 특히 좋아합니다. – owen

+0

이 응답은 주어진 특정 예제 데이터에 대해 작동하지만 일반적인 경우에는 나쁘게 실패합니다. 예를 들어'[[a ','b '], ['a ','c '], ['d ','e '], ['d ','f '], , 'h']]'listMultiple == [ 'a', 'd']'및'listSingle == [ 'b', 'c', 'e', ​​'f', 'g', ' 즉, 공유 된 요소와 목록을 결합하는 것이 아니라 단순히 요소의 수를 계산합니다. –

3

귀하의 예를 들어 데이터가 순서가있는 것, 사용자의 입력 데이터의 중요 함을 시사한다 : 나는 것처럼보고 싶어 무엇

[ 
    ['mary', 'home'], 
    ['mary', 'school'], 
    ['mary', 'work'], 
    ['bob', 'home'], 
    ['bob', 'school'], 
    ['bob', 'work'], 
    ['tom', 'work'], 
    ['tom', 'school'], 
    ['tom', 'home'], 
    ['bill', 'vacation'], 
] 

상황을 복잡하게 만든다. 이 모두가 잘 알고있는 파이썬의 for-else 구조를 사용

data = [ 
    ['mary', 'home'], 
    ['mary', 'school'], 
    ['mary', 'work'], 
    ['bob', 'home'], 
    ['bob', 'school'], 
    ['bob', 'work'], 
    ['tom', 'work'], 
    ['tom', 'school'], 
    ['tom', 'home'], 
    ['bill', 'vacation'], 
] 

combined = [] 

for subset in [set(d) for d in data]: 
    for candidate in combined: 
     if not candidate.isdisjoint(subset): 
      candidate.update(subset) 
      break 
    else: 
     combined.append(subset) 

: 실제로 단지 예제 및 주문 이 중요하지이라고 가정하면, 세트는 참으로 문제를 해결할 수있는 이상적인 방법입니다. combined에는 세트 목록이 포함되어 있으므로 사용 사례에 따라 목록으로 변환 할 수 있습니다.

+0

감사합니다. 당신 말이 옳았습니다, 명령은 중요하지 않습니다. – owen

관련 문제