카테고리 보관물: 파이썬

파이썬

파이썬에서 숫자의 목록을 합치는 방법은

아래와 같은 숫자 목록이 있으며 두 번째 와 세번째 등 [1,2,3,4,5...]을 계산 (1+2)/2하고 싶습니다 . 어떻게해야합니까?(2+3)/2(3+4)/2

첫 번째 숫자를 두 번째 숫자와 합산하여 2로 나누고 두 번째 숫자를 세 번째와 합산하고 2로 나누고 싶습니다.

또한 숫자 목록을 어떻게 합칠 수 있습니까?

a = [1, 2, 3, 4, 5, ...]
b = sum(a)
print b

하나의 숫자를 얻으려면?

위코드는  작동하지 않습니다.



답변

질문 1 : (요소 0 + 요소 1) / 2, (요소 1 + 요소 2) / 2 등을 원합니다.

첫 번째 요소를 제외한 모든 요소 중 하나와 마지막 요소를 제외한 모든 요소 중 하나의 두 가지 목록을 만듭니다. 그런 다음 원하는 평균은 두 목록에서 가져온 각 쌍의 평균입니다. 우리 zip는 두 목록에서 쌍을 취하는 데 사용 합니다.

입력 값이 정수 임에도 불구하고 결과에서 소수를보고 싶다고 가정합니다. 기본적으로 파이썬은 정수 나누기를 수행합니다. 나머지는 버립니다. 사물을 완전히 나누려면 부동 소수점 숫자를 사용해야합니다. 다행스럽게도 int를 float로 나누면 float이 만들어 지므로 2.0제수 대신을 사용 2합니다.

그러므로:

averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]

질문 2 :

그 사용은 sum잘 작동합니다. 다음과 같이 작동합니다.

a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45

또한 모든 단계에서 변수에 모든 것을 할당 할 필요는 없습니다. print sum(a)잘 작동합니다.

작성한 내용과 작동하지 않는 방식에 대해 더 구체적으로 설명해야합니다.


답변

숫자의 합계 목록 :

sum(list_of_nums)

목록 이해를 사용하여 n 및 n -1의 절반 계산 (패턴이 올바른 경우) :

[(x + (x - 1)) / 2 for x in list_of_nums]

reducelambdas를 사용하여 ((1 + 2) / 2) + ((2 + 3) / 2) + … 인접한 요소 합

reduce(lambda x, y: (x + y) / 2, list_of_nums)

답변

질문 2 :
정수 목록을 합치려면 :

a = [2, 3, 5, 8]
sum(a)
# 18
# or you can do:
sum(i for i in a)
# 18

목록에 정수가 문자열로 포함 된 경우 :

a = ['5', '6']
# import Decimal: from decimal import Decimal
sum(Decimal(i) for i in a)

답변

이 방법으로 시도 할 수 있습니다 :

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sm = sum(a[0:len(a)]) # Sum of 'a' from 0 index to 9 index. sum(a) == sum(a[0:len(a)]
print(sm) # Python 3
print sm  # Python 2

답변

>>> a = range(10)
>>> sum(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del sum
>>> sum(a)
45

sum코드 어딘가에 정의되어 있으며 기본 기능을 덮어 쓴 것 같습니다 . 그래서 나는 그것을 삭제하고 문제가 해결되었습니다.


답변

간단 list-comprehension하고 sum:

>> sum(i for i in range(x))/2. #if x = 10 the result will be 22.5

답변

모든 답변은 프로그램적이고 일반적인 접근 방식을 보여주었습니다. 귀하의 경우에 맞는 수학적 접근법을 제안합니다. 긴 목록의 경우 특히 빠를 수 있습니다. 목록이 최대 자연수 목록이기 때문에 작동합니다 n.

자연수가 있다고 가정 해 봅시다 1, 2, 3, ..., 10.

>>> nat_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sum목록에서이 기능을 사용할 수 있습니다 .

>>> print sum(nat_seq)
55

또한 공식 사용할 수 있습니다 : (여기에 목록의 마지막 요소의 값입니다 당신이 요소를 통해 반복하는을 피할 수 있도록)n*(n+1)/2nnat_seq[-1]

>>> print (nat_seq[-1]*(nat_seq[-1]+1))/2
55

시퀀스를 생성하려면 (1+2)/2, (2+3)/2, ..., (9+10)/2생성기와 수식을 사용할 수 있습니다 (2*k-1)/2.(점을 참고하여 값을 부동 소수점으로 설정). 새 목록을 생성 할 때 첫 번째 요소를 건너 뛰어야합니다.

>>> new_seq = [(2*k-1)/2. for k in nat_seq[1:]]
>>> print new_seq
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

여기에서도 sum해당 목록 의 기능을 사용할 수 있습니다 .

>>> print sum(new_seq)
49.5

그러나 formula를 사용할 수도 (((n*2+1)/2)**2-1)/2있으므로 요소 반복을 피할 수 있습니다.

>>> print (((new_seq[-1]*2+1)/2)**2-1)/2
49.5