두 개의 긴 목록이 a
있고 목록이 필요하다고 가정 b
합니다 c
.
a = [obj1, obj2, ..., objN]
b = [objNplus1, objNplus2, ..., objNplusM]
c = a + b
이전 목록을 시작과 끝으로 공유하지만 참조 무결성을 위반하지 않고, 즉 변경 a
하거나 변경 하지 않고 새 목록을 만들려면 어떻게해야합니까 b
? 또한 c
처음부터 전체 목록 을 다시 만들지 않고 ? 기본 컬렉션의 일부 또는 외부 패키지의 일부로 이러한 목록과 유사한 것이 있습니까?
나는 그것이 아마도 DFS를 모방하는 연결된 연결 목록과 함께 나무와 같은 것이라고 생각합니다.
다음을 사용할 수 있습니다 itertools.chain()
.
소진 될 때까지 첫 번째 이터 러블에서 요소를 반환하는 이터 러블을 만든 다음 모든 이터 러블이 소진 될 때까지 다음 이터 러블로 진행합니다. 연속 된 시퀀스를 단일 시퀀스로 처리하는 데 사용됩니다.
예를 들면 :
import itertools
c = itertools.chain(a, b)
업데이트 :보다 밀접하게 에뮬레이트하려면 다음과 list
같이 자신 만의 클래스를 작성할 수 있습니다.
class ListOfLists():
def __init__(self, *args):
self._lists = args
self._len = sum(map(len, self._lists))
def __iter__(self):
for _list in self._lists:
for item in _list:
yield item
def __getitem__(self, y):
if y >= self._len:
raise IndexError
for l in self._lists:
if y > len(l):
y -= len(l)
else:
return l[y]
def __len__(self):
return self._len
a = [1, 2, 3]
b = ["a", "b", "c"]
c = ListOfLists(a, b)
print("Total length is", len(c))
print("4th element is", c[4])
for i, item in enumerate(c):
print(i, ":", item)
산출:
Total length is 6
4th element is b
0 : 1
1 : 2
2 : 3
3 : a
4 : b
5 : c
다른 방법 (예 : __getslice__()
슬라이싱이 필요한 경우)도 구현 해야합니다. 또한 재귀 적이 지 않으므로 list
기존 형식의 "일반"만 병합 할 수 있습니다 . ListOfList
s를 생성자에 전달하면 작동하지 않습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다