python 함수 - 한 번에 여러 개의 목록을 추가 할 수 있습니까?(파이썬)





여러개 문자열 (6)


다음과 같이 표시된 시작 값 (빈 목록)이있는 sum 함수를 사용할 수 있습니다.

a = sum([x, y, z], [])

이는 임의의 수의 목록을 추가하려는 경우에 특히 적합합니다.

필자가 작성하려고하는 프로그램의 "기본"목록과 같은 단일 목록에 추가하려는 목록이 있습니다. 10 개가 아닌 한 줄의 코드에서이 작업을 수행 할 수 있습니까? 나는 초심자이므로 잘 모르겠다.

내 질문에 대한 더 나은 그림을보기 위해 내가이 목록을 가지고 있다면 어떨까요?

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

그리고 x에 y와 z를 더하고 싶습니다. 대신에 :

x.append(y)
x.append(z)

한 줄의 코드에서이 작업을 수행 할 수있는 방법이 있습니까? 나는 벌써 시도했다.

x.append(y, z)

그리고 그것은 효과가 없습니다.




내 댓글 확장

In [1]: x = [1, 2, 3]
In [2]: y = [4, 5, 6]
In [3]: z = [7, 8, 9]
In [4]: from itertools import chain
In [5]: print list(chain(x,y,z))
[1, 2, 3, 4, 5, 6, 7, 8, 9]



x.extend(y+z)

네가 원하는 걸해야 해.

또는

x += y+z

또는

x = x+y+z



좀 더 기능적인 접근법을 선호한다면 다음을 시도해 볼 수 있습니다.

import functools as f

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

x = f.reduce(lambda x, y: x+y, [y, z], x)

이렇게하면 임의의 수의 목록을 목록 x 에 연결할 수 있습니다.

원하는 수의 목록을 연결하려는 경우 (즉, 기본 목록이 아닌 경우) 다음을 단순화 할 수 있습니다.

import functools as f
from operator import add
big_list = f.reduce(add, list_of_lists)

우리 BFDL은 람다 (lambdas), 감축 (reduce) 및 친구에 관한 그의 예약을 가지고 있음을 기억하십시오 : https://www.artima.com/weblogs/viewpost.jsp?thread=98196

이 답변을 완료하려면 문서에서 reduce에 대해 자세히 알아보십시오. https://docs.python.org/3/library/functools.html#functools.reduce

나는 다음과 같이 인용한다. "시퀀스의 항목을 왼쪽에서 오른쪽으로 누적 적으로 두 개의 인수로 묶어 시퀀스를 단일 값으로 줄이십시오."

추신 : https://.com/a/41752487/532513 설명 된대로 sum() 을 사용하면 초소형이며 목록에서 작동하는 것처럼 보이며 실제로 빠릅니다 ( https://.com/a/33277438/532513 )하지만 Python 3.6의 help(sum) 에는 다음과 같은 내용이 있습니다.

이 함수는 숫자 값과 함께 사용하기 위해 특별히 고안되었으며 숫자가 아닌 형식은 거부 할 수 있습니다.

이것은 약간 걱정이지만 목록을 연결하는 첫 번째 옵션으로 유지할 것입니다.




위의 답변과 동일하지만 언급 할만큼 충분히 다른 :

my_map = {
   'foo': ['a', 1, 2],
   'bar': ['b', '2', 'c'],
   'baz': ['d', 'e', 'f'],
} 
list(itertools.chain(*my_map.values()))
['d', 'e', 'f', 'a', 1, 2, 'b', '2', 'c']

위의 식에서 *는 args를 사슬로 묶는 결과를 얻기 위해 중요합니다. 이것은 이전 사슬 (x, y, z)과 같습니다. 또한 결과가 해시 순서로 표시됩니다.




메타 클래스의 용도 중 하나는 새로운 속성과 메서드를 인스턴스에 자동으로 추가하는 것입니다.

예를 들어, Django 모델 을 보면, 그 정의가 약간 혼란스러워 보입니다. 클래스 속성 만 정의하는 것처럼 보입니다.

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

그러나 런타임에 Person 객체는 모든 유용한 메소드로 채워진다. 놀라운 metaclassery에 대한 source 를 참조하십시오.





python list append