2017-04-13 1 views
-1

저는 Python을 처음 사용하고 기존 프로그램을 수정하려고합니다. 여러 목록이 있고 정렬 된 방식으로 작업을 수행해야합니다. . 내가 (즉, 밖으로 다음 큰 배열에서 나머지 요소를 결합하여 실행되는 작은 배열까지 요소를 교대로 결합특수 규칙을 사용하여 요소 단위로 문자열 목록 결합

이를 elements = ['A1B1', 'A2B2', 'A3B3', 'B4B5']으로 새로운 목록을 얻으려면

list_A = ['A1', 'A2', 'A3'] 
list_B = ['B1', 'B2', 'B3', 'B4', 'B5'] 

: 예를 들어, 나는 다음과 같은 목록이있는 경우 .? 내가 N 목록이 작업을 수행하기 위해 노력하고있어이 개 목록에 대한 예입니다 만

이를 달성하는 '파이썬'방법이 있나요

편집 :합니다 (N> 3 사건에 대한 더 많은 정보를 추가하고 목록을 더 크게 만들어서 더 명확하게 m).

list_A = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'] 
list_B = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6'] 
list_C = ['C1', 'C2', 'C3', 'C4'] 

'최소형'목록부터 시작하여 페어링을 시작하십시오. 지금은 하나의 짧은 목록이 있고 다른 하나는 같은 길이 인 경우를 처리하고 있습니다. 따라서 아래의 A 또는 B가 작동합니다.

예상 출력 : 목록 중 하나가 비어 있지만 다른 두가 (아마도 불평등) 양이있을 때 ['C1B1', 'C2B2', 'C3B3', 'C4B4', 'B5B6', 'A1A2', 'A3A4', 'A5A6']

+6

제목의 질문이 게시물의 질문과 무슨 관련이 있습니까? – timgeb

+6

초과 요소 정책은 N> 2로 어떻게 변환됩니까? –

+0

여기에 답변을 얻으려는 자세가 너무 많으므로 자세한 내용을 추가하고 @timgeb에 의하면 귀하의 질문은 귀하의 게시물 내용과 관련이 없습니다. – direprobs

답변

0

귀하의 질문은 N> 3 (이상) 경우에 발생하는 지정하지 않습니다 요소가 남아 있습니다.

어쨌든이 재귀 적 솔루션을 구현하는 데 약간의 재미가 있었기 때문에 가치있는 것은 여기에 있습니다.

list_A = ['A1', 'A2', 'A3'] 
list_B = ['B1', 'B2', 'B3', 'B4', 'B5'] 
list_C = ['C1', 'C2'] 

def combine(*lists): 
    lists = filter(None, lists) 
    if not lists: 
     return [] 
    if len(lists) == 1: 
     return [''.join(lists[0])] 

    minlen = len(min(lists, key=len)) 
    head = [''.join(x) for x in zip(*lists)] 
    tail = [l[minlen:] for l in lists] 

    return head + combine(*tail) 

a = combine(list_A, list_B) 
b = combine(list_A, list_B, list_C) 

print a # ['A1B1', 'A2B2', 'A3B3', 'B4B5'] 
print b # ['A1B1C1', 'A2B2C2', 'A3B3', 'B4B5'] 

다음과 같이 작동 :만큼 모든 목록이 소진되지, 알고리즘이 함께 남아있는 목록의 요소를 압축 할 것입니다. 단일 목록에 항목이 남아 있으면 해당 항목은 단일 문자열로 연결되고 결과에 추가됩니다. 이것은 N> 2 경우에 대해 원하는 것 일 수도 있고 아닐 수도 있습니다.

+0

고마워,이게 내가 찾고 있었던거야. 내 원래의 질문에 더 많은 정보가 필요하다고 생각합니다. 하지만 내 코드가 내 솔루션에 대한 좋은 출발점이라고 생각합니다! –

-1
# Notice: the lists are composed of integers... 
>>> a_list = [1, 2, 3] 
>>> b_list = [4, 5, 6] 
>>> c_list = [7, 8, 9] 
>>> def cat(a_list): 
...  string = '' 
...  for i in a_list: 
...    string += str(i) # so we convert them to string. 
...  return string 
... 
>>> # Using a list comprehension and an un-named variable, along with the 
>>> # zip() function. 
>>> [cat(_) for _ in zip(a_list, b_list, c_list)] 
['147', '258', '369'] 
+1

이것은 질문의 내용과 어떤 관련이 있습니까? 출력의 전체 사양이 불분명하더라도 최소한의 불일치 목록 길이를 가져야합니다. – roganjosh

관련 문제