2014-11-22 56 views
-2

我想根據是否存在逗號合併列表的某些部分。如果我使用用戶輸入:"1231,fdkgjdkfj45,294d",我希望將其轉換爲["1231", "45", "294"]。我可以刪除列表中不是數字的所有內容(使用列表理解),但我希望程序識別逗號的位置,然後將逗號前的列表中的項目合併在一起(直到前一個逗號)。根據列表中的項目合併列表的某些部分 - Python

我明白我還沒有措辭這個驚人的,但我認爲你應該能夠明白我的意思。

我覺得是必要的步驟如下:

  1. 在不是數字或逗號列表中刪除所有內容(這樣做了,使用另一個列表,列表理解)

  2. 檢查對方是否有逗號,然後刪除重複項。 (我應該能夠很容易地做到這一點)

  3. 使用「for」循環來檢查列表中的位置,並且在查找逗號時,合併列表中的所有項目,直到此逗號爲止前面的逗號在一起。 (這是我不能做的)

任何反應將不勝感激。

+2

你的代碼在哪裏?它的問題究竟是什麼? – jonrsharpe 2014-11-22 13:58:03

+1

你需要向我們展示你之前的嘗試! – Kasramvd 2014-11-22 13:58:52

+0

仇恨強烈。 我是新來的,這是我的第二篇文章。我知道接下來要做什麼' – Shaney96 2014-11-22 14:10:04

回答

2

您可以在','字符的split列表中,然後遍歷每個子列表和join的數字字符。

>>> s = "1231,fdkgjdkfj45,294d" 
>>> [''.join(i for i in chunk if i.isdigit()) for chunk in s.split(',')] 
['1231', '45', '294'] 

如果您還不熟悉列表理解(這是如上圖所示),在這裏是一個多走一步一步的解決方案,它大約相當於

numList = [] 
for chunk in s.split(','): 
    digits = [] 
    for char in chunk: 
     if char.isdigit(): 
      digits.append(char) 
    numList.append(''.join(digits)) 

>>> numList 
['1231', '45', '294'] 
+0

感謝你的這一點,在不需要實現其他模塊的情況下,這更符合我的水平。 – Shaney96 2014-11-22 14:09:16

+0

@ Shaney96:正則表達式(正則表達式)是強大的,_definitely_值得了解。大多數腳本語言都有某種形式的正則表達式支持,雖然語法有一些變化,但是一旦你用一種語言掌握了它們,你就可以在其他語言中使用它們。不過,我覺得使用正則表達式對於你的問題可能是過度的,我傾向於使用Cyber​​的答案中使用的方法。 – 2014-11-22 14:34:04

+0

我會同意這一點,我目前正在做我的A2級計算課程,顯然還在學習很多關於這門語言的知識,並且花費很多:) – Shaney96 2014-11-22 14:51:12

0

你只需要正則表達式。

>>> import re 
>>> str_="1231,fdkgjdkfj45,294d" 
>>> re.findall(r'[0-9]+',str_) #[0-9] tells regex to look for digits only while + tells to look for one or more of them 
['1231', '45', '294'] 
+0

使用're.split()'比'findall ()'也不應該回答像功課一樣的問題! – Kasramvd 2014-11-22 14:02:04

+0

爲此歡呼,我以前從未聽說過這個模塊,並且這個工作很有魅力,我會對正則表達式進行一些研究,以便了解它是如何工作的。 – Shaney96 2014-11-22 14:07:47

+0

這不是一個家庭作業問題,我只是卡在我創造的遊戲中的一部分,這是Tkinter的河內遊戲塔 – Shaney96 2014-11-22 14:08:44

相關問題