2013-06-18 3 views
3
a = ['in 1978 by', 'History', 'members', 'albums', 'June 4th, 1979', 'October 7,1986): "The Lounge', 'In 1984 the', 'early 1990s; prominent'] 

위의 목록은 역사, 그들에 숫자를이없는 회원과 같은 단어를 가지고, 그래서 당신이 원하는 사람을 계속 그들에게파이썬 목록에서 숫자가없는 단어를 삭제하는 방법은 무엇입니까?

# output would be 
a = ['in 1978 by', 'June 4th, 1979', 'October 7, 1986', 'In 1984 the', 'early 1990s; prominent'] 

답변

8

을 삭제하려면 : 여기

a = ['in 1978 by', 'History', 'members', 'albums', 'June 4th, 1979', 'October 7,1986): "The Lounge', 'In 1984 the', 'early 1990s; prominent'] 

new = [el for el in a if any(ch.isdigit() for ch in el)] 
# ['in 1978 by', 'June 4th, 1979', 'October 7,1986): "The Lounge', 'In 1984 the', 'early 1990s; prominent'] 
+0

네, 고마워요. –

+0

+1 목록 이해력. @ jon : 어떻게하면 (ch.isdigit()) 작동하는지 간단히 알 수 있습니까? 특히 'any'가하는 일. 고마워요. –

+0

@ user1988876 우리는 목록에서 각 요소를 가져 와서 각 문자를 가져 와서 그 중 하나가 숫자인지 확인합니다. 그렇다면 우리는 그 사실을 추론하여 추가 할 수 있습니다 이것은 수표를 찾자 마자 수표가 단락 될 수 있음을 의미합니다 (첫 번째 수표는 1948 년에'1 '에 도착하면됩니다). ...) –

1

이입니다 더 짧은 대안, any()string.digits을 사용하여 :

from string import digits 

a = ['in 1978 by', 'History', 'members', 'albums', 'June 4th, 1979', 
    'October 7,1986): "The Lounge', 'In 1984 the', 'early 1990s; prominent'] 

[x for x in a if any(y in x for y in digits)] 

=> ['in 1978 by', 'June 4th, 1979', 'October 7,1986): "The Lounge', 
    'In 1984 the', 'early 1990s; prominent'] 
+1

"이 문자 숫자 중 하나입니까?"에서 "이 문자열의 임의의 숫자입니까?"에서 검색 결과의 반전 (허용 된 답변과 비교)은 아마도 파이썬에서 더 나은 성능을 제공 할 것입니다. –

0

정규 표현식과 목록 이해력을 사용하면 한 줄짜리입니다.

import re 
[i for i in a if re.search('\d', i) is not None] 
+0

여기에 발전기가 없습니다. (또한 , 정규 표현식이없는 하나의 라이너이기도합니다.) – abarnert

+0

고정되어 있습니다. 다른 방법을 통해 한 줄짜리 코드이기도합니다. – jozzas

관련 문제