2014-08-30 62 views
-4

我只是有點麻煩讓我的頭在python中的列表和元組。 我所擁有的是一個列表(?我認爲),它需要轉換爲下面給出的特定格式的元組?
我該怎麼辦?
我:
如何將列表格式化爲具有子元組的元組?

['A, B, C, D, e, f, g, h, i', '1, 2, 3, 4, 5, 6, 7, 8, 9',] 

怎麼可以這樣被格式化爲一個元組與子元組如

[ 
    ('A', 'B', 'C', 'D', ('e', 'f', 'g', 'h', 'i')), 
    ('1', '2', '3', '4', ('5', '6', '7', '8', '9')), 
    ... 
] 
+3

您忘記了通過什麼規則指定列表中的每個字符串都被轉換爲具有嵌套元組的元組。此外,元組中的這些值可能仍然是字符串,但是您的輸出示例缺乏引號。 – 2014-08-30 07:43:20

+0

我修正了Martijn提出的以後的觀點。現在由你來檢查這一變化,並進一步編輯你的問題[更清楚地解釋你的需求](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 。 – 2014-08-30 07:48:47

+0

@MartijnPieters我不確定你的意思到底是什麼,但是每個'list item'中的5-9個元素需要在嵌套元組 – user3728778 2014-08-30 07:56:03

回答

1

您可以在列表中的逗號的每個項目分解;在這裏我假設你也總是有逗號後面輸入一個空格:

result = [] 
for elem in inputlist: 
    elems = elem.split(', ') 
    elems[4:] = [tuple(elems[4:])] 
    result.append(tuple(elems)) 

舞蹈與tuple()並要求片分配,使其能夠建立外元組。此處的elems[4:]賦值將使用僅包含一個元組的列表替換列表的第5個直到尾部分。

如果你的字符串包含逗號沒有空格或空白是可變的,你可以使用一個分裂和條策略:

elems = [e.strip() for e in elem.split(',')] 

演示:

>>> inputlist = ['A, B, C, D, e, f, g, h, i', '1, 2, 3, 4, 5, 6, 7, 8, 9',] 
>>> result = [] 
>>> for elem in inputlist: 
...  elems = elem.split(', ') 
...  elems[4:] = [tuple(elems[4:])] 
...  result.append(tuple(elems)) 
... 
>>> result 
[('A', 'B', 'C', 'D', ('e', 'f', 'g', 'h', 'i')), ('1', '2', '3', '4', ('5', '6', '7', '8', '9'))] 
0

但5每個'列表項'中的-9個元素需要位於嵌套元組中

Fix編輯大小?那麼,關於:

import re 

lst = ['A, B, C, D, e, f, g, h, i', '1, 2, 3, 4, 5, 6, 7, 8, 9',] 

def prefix_by_four(lst): 
    return tuple(lst[:4]) + (tuple(lst[4:]),) 
#   ^^^^^^^^^^^^^^ ^   ^^ 
# make a tuple with the note how tuples are nested here: 
# first 4 items    make a tuple of one element `(... ,)` 
#        containing a tuple with the remaining items 

result = [ prefix_by_four(re.split(r',\s*',item)) for item in lst ] 
#         ^^^^^^ 
#       split on `,` followed by 
#       zero or more spaces 

from pprint import pprint 
pprint(result) 

生產:

[('A', 'B', 'C', 'D', ('e', 'f', 'g', 'h', 'i')), 
('1', '2', '3', '4', ('5', '6', '7', '8', '9'))] 

這裏我用了一個 「輔助函數」 做分組。 A lambda expression本來是可能的,但我認爲可讀性較差。

相關問題