2017-09-10 3 views
1

숫자 튜플이 있는데 특정 숫자와 함께 튜플의 임의의 숫자를 선택하고 싶습니다. 예를 들면 :튜플에서 임의의 숫자 선택 + 일부 숫자

my_tuple = (1,2,3) 

와 나는 숫자 1,2,3,4에서 임의의 번호를 선택 할 수 4.이 (물론 튜플을 변경하지 않고).

내가 시도 :

my_tp = (1, 2, 3) 
a = random.choice(list(my_tp).append(4)) 
print(a) 

내가 파이썬에 새로운 해요. 튜플을 목록으로 변환 한 다음 임의의 함수를 수행하려고했습니다. 위 코드가 작동하지 않았습니다. 유형 'NoneType'의

객체가 도움이 싶어요 더 LEN()를

이없는 오류가 발생했습니다.

답변

2

list.append 반환 none

일단 그래서 당신 error의 소스입니다 list을 수정하지만 none를 반환합니다 추가, 작업이 완료 한 같은 list로 변환.

는 다음, 그것에 tuple append 4 다음 list A를 변환 random.choice를 사용하거나 한 단계에서, 당신은 + 피연산자 [4]의 목록을 연결할 수 있습니다 할 수 있습니다 것을 라운드 얻으려면.

이 방법은 매우 간단하다 :

import random 

my_tuple = (1,2,3) 
random.choice(list(my_tuple) + [4]) 

희망이 도움 몇 가지를 지 웁니다! :)

업데이트 :

그냥 무작위로 마지막 항목없이 튜플에서 선택합니다, 일반 구문 그럼 그냥 slice 목록 :

random.choice(list(my_tuple)[:-1]) 
+0

감사합니다. 그리고 뺄셈을하고 싶다면? 간단한 '-'는 그것을하지 않을 것입니다 – sheldonzy

+0

무엇을 의미합니까? 여기에서는 덧셈을 사용하지 않고,'+'는리스트를 연결합니다. –

+0

예. 튜플이 (1,2,3)이고 숫자 3을 빼고 (1,2) – sheldonzy

2

list.append 메서드는 제공된 목록을 변경하고 None을 반환하므로 예외가 발생했음을 설명합니다. 원하는 결과를 얻으려면 암시 ​​적으로 tuple.__add__ 메서드를 사용할 수 있습니다.이 메서드는 새 튜플을 반환합니다.

values = (1, 2, 3) 
random.choice(values + (4,)) 

당신이 적합 할 수있는 set을 사용하여 간결한 틱 방식으로 값을 제거하십시오.

values = {1, 2, 3} 
random.choice(list(values - {3})) 
+0

감사합니다. 그리고 뺄셈을하고 싶다면?간단한 '-'는 그것을하지 않을 것이다 – sheldonzy

+1

@sheldonzy이 방식으로 "빼기"를 허용하는 유일한 내장은'set'이다. 이 사용법을 보여주는 옵션을 추가했습니다. –

1

당신이 시도 할 수 : (*my_tuple, 4)my_tuple4의 압축을 푼 내용에 새로운 튜플을 생성

my_tuple = (1,2,3) 
random.choice((*my_tuple, 4)) 

.

+0

압축 해제 구문은 [Python 3.0의 새로운 기능] (https://www.python.org/dev/peps/pep-3132/) –

+0

입니다. [python3.5] (https : //docs.python.org/3/whatsnew/3.5.html#pep-448-additional-unpacking-generalizations). 2015 년 9 월에. 내가 정확히 새라고 부르는 것은 아닙니다. – FabienP