Python : 목록에서 빈 목록을 제거하는 방법?
이 질문에 이미 답변이 있습니다.
- 목록에서 모든 값을 제거 하시겠습니까? 22 답변
빈 목록이있는 목록이 있습니다.
list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
빈 목록을 제거하여 다음을 얻을 수 있습니다.
list2 = ['text', 'text2', 'moreText']
list.remove ( '') 시도했지만 작동하지 않습니다.
시험
list2 = [x for x in list1 if x != []]
빈 문자열, 빈 튜플, 0과 같이 "허위"인 모든 것을 제거하려면 다음을 사용할 수도 있습니다.
list2 = [x for x in list1 if x]
filter()
목록 이해력 대신 사용할 수 있습니다 .
list2 = filter(None, list1)
에 대한 None
첫 번째 인수로 사용되는 경우 부울 컨텍스트 filter()
에있는 지정된 목록의 모든 값을 필터링합니다 False
. 여기에는 빈 목록이 포함됩니다.
파이썬에서 단일 함수 만 실행하고 나머지는 C로 수행되기 때문에 목록 이해보다 약간 빠를 수 있습니다.
호출 filter
로하는 것은 None
(빈리스트 인) 목록에서 모든 falsey 값을 필터링합니다
list2 = filter(None, list1)
>>> list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
>>> list2 = [e for e in list1 if e]
>>> list2
['text', 'text2', 'moreText']
몇 가지 옵션 :
filter(lambda x: len(x) > 0, list1) # Doesn't work with number types
filter(None, list1) # Filters out int(0)
filter(lambda x: x==0 or x, list1) # Retains int(0)
샘플 세션 :
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
>>> filter(lambda x: len(x) > 0, list1)
['text', 'text2', 'moreText']
>>> list2 = [[], [], [], [], [], 'text', 'text2', [], 'moreText', 0.5, 1, -1, 0]
>>> filter(lambda x: x==0 or x, list2)
['text', 'text2', 'moreText', 0.5, 1, -1, 0]
>>> filter(None, list2)
['text', 'text2', 'moreText', 0.5, 1, -1]
>>>
OP와 똑같은 일을하고 싶었 기 때문에이 질문을 찾았습니다. 다음 관찰 내용을 추가하고 싶습니다.
반복적 인 방법 (user225312, Sven Marnach) :
list2 = [x for x in list1 if x]
및 에서 list
개체를 반환합니다 . 대신 필터 방식 (lunaryorn, Imran)은 버전에 따라 다르게 작동합니다.python3
python2
list2 = filter(None, list1)
그것은 반환 filter
의 객체 python3
와 list
의를 python2
(볼 이 질문에 동시에 발견을). 이것은 약간의 차이이지만 호환 가능한 스크립트를 개발할 때 고려해야합니다.
이것은 이러한 솔루션의 성능에 대한 어떠한 가정도하지 않습니다. 어쨌든 필터 개체는 다음을 사용하여 목록으로 되돌릴 수 있습니다.
list3 = list(list2)
더 복잡한 중첩 개체에서 빈 항목을 필터링해야했습니다. 나는 그것을하기 위해 재귀 함수를 만들었다. 여기 내 SO 대답을 참조 하십시오 .
list1 = [[], [], [], [], [], 'text', 'text2', [], 'moreText']
list2 = []
for item in list1:
if item!=[]:
list2.append(item)
print(list2)
산출:
['text', 'text2', 'moreText']
a = [[1,'aa',3,12,'a','b','c','s'],[],[],[1,'aa',7,80,'d','g','f',''],[9,None,11,12,13,14,15,'k']]
b=[]
for lng in range(len(a)):
if(len(a[lng])>=1):b.append(a[lng])
a=b
print(a)
산출:
[[1,'aa',3,12,'a','b','c','s'],[1,'aa',7,80,'d','g','f',''],[9,None,11,12,13,14,15,'k']]
위의 답변에 추가하여 다음 list of lists
과 같은 형식 이 있다고 가정합니다 .
theList = [['a','b',' '],[''],[''],['d','e','f','g'],['']]
각 목록에서 빈 항목과 수행 할 수있는 빈 목록을 제거하려고합니다.
theList = [x for x in theList if x != ['']] #remove empty lists
for i in range(len(theList)):
theList[i] = list(filter(None, theList[i])) #remove empty entries from the lists
새 목록은 다음과 같습니다.
theList = [['a','b'],['d','e','f','g']]
참조 URL : https://stackoverflow.com/questions/4842956/python-how-to-remove-empty-lists-from-a-list
'Programing' 카테고리의 다른 글
Vue.js 데이터 바인딩 스타일 backgroundImage가 작동하지 않음 (0) | 2020.12.28 |
---|---|
Java에서 정규식 날짜 형식 유효성 검사 (0) | 2020.12.28 |
malloc () 대 HeapAlloc () (0) | 2020.12.28 |
MVVM WPF 프로젝트의 DataGrid에서 여러 항목 선택 (0) | 2020.12.28 |
Rubocop 25 라인 블록 크기 및 RSpec 테스트 (0) | 2020.12.28 |