2017-04-03 97 views
1

如何使用[x for x in input](其中input是字符串列表)創建列表的列表並在滿足某些條件時跳過元素?例如,這是列出的清單:在Python中創建列表和跳過元素的列表

[['abc', 'def', 'ghi'], ['abc', 'd_f', '+hi'], ['_bc', 'def', 'ghi']] 

,這應該是輸出 - 包含跳過的元素是「_」或「+」:

[['abc', 'def', 'ghi'], ['abc'], ['def', 'ghi']] 

謝謝!

+0

http://www.diveintopython.net/power_of_introspection/filtering_lists.html – FLab

回答

0

你需要一個子列表理解:

[[item for item in sub if not any(char in item for char in '_+')] for sub in input] 

這是一個簡化版本:

result = [] 
for sub in input: 
    result.append([]) 
    for item in sub: 
     should_add = True 
     for char in '_+': 
      if char in item: 
       should_add = False 
       break 
     if should_add: 
      result[-1].append(item) 
0

非常相似,除了測試對方的回答如果字符串只包含字母數字字符而不是具體的'_''+'。循環遍歷每個子列表,然後遍歷每個子列表中的字符串。

​​
0

使用另一個短版設置

stuff= [['abc', 'def', 'ghi'], ['abc', 'd_f', '+hi'], ['_bc', 'def', 'ghi']] 
unwanted = {'+', '-'} 
filtered = [[item for item in s if not set(s) & unwanted] for s in stuff]