2016-09-18 36 views
-1

我想Python列表分成先從以下分裂使用製表和空格的列表爲二維表

testList = ["Color Blue»Temperature Warm»Gender Male", 
      "Color Green»Temperature Warm»Gender Female"] 

凡»是一個製表符和屬性(顏色的2D列表,溫度,性別)在他們面前有一個標籤,而具體(藍色,溫暖,男性)在他們面前有一個空間。

我想忽略的屬性,並創建一個二維表像

newList = [["Blue", "Warm", "Male"], ["Green", "Warm", "Female"]] 

,但我無法弄清楚如何使用split()strip()字符串的方法來做到這一點。

+0

'應用re.sub(R 「\ B \ W +(\ W +)」,R 「\ 1」, 「」。加入(testList) )' – Natecat

回答

2

如果屬性名稱和值始終是單措辭,你可以在字符串中讓每一個奇數(索引從0開始)詞語:

>>> testList = ["Color Blue Temperature Warm Gender Male", "Color Green Temperature Warm Gender Female"] 
>>> print([item.split()[1::2] for item in testList]) 
[['Blue', 'Warm', 'Male'], ['Green', 'Warm', 'Female']] 
0

這裏的(另一個)的方式來做到這一點:

testList = ["Color Blue Temperature Warm Gender Male", 
      "Color Green Temperature Warm Gender Female"] 

newList = [[subitem.split()[-1] for subitem in item.split('\t')] 
            for item in testList] 

print(newList) # -> [['Blue', 'Warm', 'Male'], ['Green', 'Warm', 'Female']] 
0

溶液依靠屬性名稱( 「顏色」, 「溫度」, 「性別」)和Alternative regular expression module(允許OV erlapping匹配):

import regex as re 

testList = ["Color Blue Temperature Warm Gender Male", "Color Green Temperature Warm Gender Female"] 
items = re.findall(r'Color (\w+)\b Temperature (\w+)\b[\s\t]*?Gender (\w+)', ' '.join(testList), overlapped=True) 

print([list(m) for m in items]) 

輸出:

[['Blue', 'Warm', 'Male'], ['Green', 'Warm', 'Female']]