2017-09-24 48 views
-1

如果如何把元組轉換爲字符串在Python

original = 'MK320MK180FM340SH230LL2HHH22TGF22', 

然後我就剝奪一個字符串列表,使得看起來像這樣(字符串 - >元組):

list = {('MK320',), ('MK180',), ('FM340',), ('SH230',), ('LL2',), ('HHH22',), ('TGF22',)} 

我想去除括號內的逗號。也就是說,我想讓這些元組再次被串回。我做的是:

for i in range(len(list)): 
''.join(list[i]) 

但它沒有得到任何好轉。然後我想把它傳遞給另一個命令,即Counter。但是,實際上包括了我不太喜歡的Counter {(blabla)}。我希望以字典形式得到結果,如下所示:

{('MK320': 1, 'MK180': 1, 'FM340': 1, 'SH230': 1, 'LL2': 1, 'HHH22' : 1, 'TGF22': 1} 

最終計算每個產品名稱的頻率。

+0

計數器是一個字典。您訪問的鍵沒有任何不同於普通的字典對象 –

+0

請顯示生成元組的代碼 –

+1

您可以通過執行'dict(counter)' – MatsLindh

回答

1

試試這個:

lst = [('MK320',), ('MK180',), ('FM340',), ('SH230',), ('LL2',), ('HHH22',), ('TGF22',)] 
lst = [t[0] for t in lst] 
+0

這實際上有效,但你能解釋更多嗎? – Mayjunejuly

+0

@Mayjunejuly'('MK320',)''是一個只有一個元素的元組,用於獲取元素'('MK320',)[0]#=>'MK320'' –

1

我不知道你如何將你的字符串轉換爲settuple你有。而且,當你不需要它時,你甚至爲什麼要創建它?

您可以使用re模塊,以獲得所需使用列表中的re.findall(pattern, string)

>>> import re 

>>> my_str = 'MK320MK180FM340SH230LL2HHH22TGF22' 
>>> re.findall('[A-Za-z]+\d+', my_str) 
['MK320', 'MK180', 'FM340', 'SH230', 'LL2', 'HHH22', 'TGF22'] 

然後,你可以使用collection.Counter得到計數。例如:

>>> from collections import Counter 
>>> word_list = re.findall('[A-Za-z]+\d+', my_str) 

>>> Counter(word_list) 
Counter({'MK180': 1, 'SH230': 1, 'LL2': 1, 'FM340': 1, 'MK320': 1, 'TGF22': 1, 'HHH22': 1}) 
+0

我將字符串轉換爲元組集合,然後做同樣的事情因爲這個問題要求我這樣做。 – Mayjunejuly

1

original變量有一個逗號它,這使得後的元組。如果您希望它是一個字符串,請刪除尾隨逗號。

original = 'MK320MK180FM340SH230LL2HHH22TGF22' 

您尚未顯示如何生成list變量。 (旁註:不名變量liststr,它屏蔽了該內建類型。)但是,你可以在此字符串分割成獨立的部分,像這樣:

import re 

original = 'MK320MK180FM340SH230LL2HHH22TGF22' 

split_list = re.findall(r'[A-Z]+\d+', original) 

list變量實際上是一組。集合的語法是{item1, item2, item3},而列表的語法是[item1, item2, item3]

如果你想打開這個集合中的每個元組到它的第一個元素:

new_list = [item[0] for item in list] 

最後,如果你要計算這個列表中的每個項目的情況下,你可以將它傳遞給collections.Counter

import re 
import collections 

original = 'MK320MK180FM340SH230LL2HHH22TGF22' 

split_list = re.findall(r'[A-Z]+\d+', original) 

count = collections.Counter(split_list) 
1
list = {('MK320',), ('MK180',), ('FM340',), ('SH230',), ('LL2',), ('HHH22',), ('TGF22',)} 

,這是一個設定,而不是一個列表。

請不要使用list作爲變量名稱,因爲這個名稱已經有一個非常有用的內建函數。我打算假裝你把它命名爲list1

這聽起來像你想扯起元素了1元組:

list2 = [elt for elt, in list1] 

然後,你可以如你所願與', '.join(list2)加入。

+0

Elt假設意思是? Python對我來說還是非常新的。 – Mayjunejuly

0

你可能有一個錯字,或者你正在做一些與你描述的不同的東西。你的list實際上是一組元組。如果這就是你的意思,那麼你不能像你在for循環中顯示的那樣使用索引。鑑於你所要顯示的輸出,它也不是很清楚你將要做什麼,因爲這是括號後面的大括號無效的語法。

來自@ Moses-koledoye的回答是給出你想要的正確答案。

+0

不,它不完全是。五分鐘切片並不能提供他們想要的確切結果。 –

+0

顯然你是對的。沒有意識到他們的長度不盡相同。 – ABirnberg