이 함수는 바이러스가 죽을 확률을 나타내는 [ATCG, GTAC .....] 및 mortalityProb (0과 1 사이의 부동 소수점)와 같은 바이러스 목록을 가져야합니다/목록에서 삭제하십시오. 나머지 바이러스와 함께 새 목록을 반환해야합니다. 각각의 바이러스는 죽을 수있는 개별 기회를 가지므로 사망률이 0.6 일 경우 남은 바이러스의 약 60 %가 남아 있어야합니다.임의로 생성 된 번호에 따라 목록에서 요소 삭제
이것은 2 줄 (def kill (viruses, mortalityProb) : :) 및 목록 작성을 사용하는 코드 행에서 수행 할 수 있어야합니다.
def kill(viruses, mortalityProb):
for i in viruses:
if random.randint(0, 100) < (mortalityProb * 100):
del i
return viruses
이것은 제대로 작동하지 않지만 그 이유는 알 수 없습니다. 루프에서 "내가 '실제로는리스트의 요소가 아니기 때문에
'del i'은 'i 변수'의 할당을 취소하는 것을 의미합니다. 그것은 그 이상을 수행하지 않습니다. 모든 목록에서 개체를 제거하지 않습니다. – user2357112
이렇게하는 한 가지 방법은'viruses.remove (i)'입니다. 그러나 반복하면서 목록을 변경하는 다양한 게시를 참조하십시오. – Prune
@Prune은 아름다운 답변을주었습니다. 단 한 줄 짜기를 쓰는 것이 파이썬적인 방법이 아니며, 읽을 수있는 코드를 작성하는 것이 가장 좋습니다! 그러나 @ Prune의 대답은'import random '대신'random import'에서'random import'를 가져올 수 있지만 여전히 읽기 쉽습니다. 따라서 random.random() 대신에 random()을 사용하여 공간을 절약 할 수 있습니다 과민성이 증가합니다. – Lycopersicum