2016-09-18 50 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']]