2017-05-13 261 views
-1

我試圖從包含重複字母的列表中刪除所有單詞(以'd'和'r'開始測試),但無法檢查所有字母i想要它。python:刪除列表中重複字母的所有單詞

a = ["word","worrd","worrrd","wordd"] 
alpha = ['d','r'] 
i = 0 
x = 0 
while x in range(0, len(alpha)): 
    while i in range(0, len(a)): 
     if a[i].count(alpha[x]) > 1: 
      del(a[i]) 
      i = i - 1 
     else: 
      i = i + 1 
    x = x + 1 
print(a) 
+0

因爲你沒有在「x」循環中重置我,所以這會導致匹配下一個字符的問題。 – mangupt

回答

0

你在做正確的,但你忘了重新設置的「我」的,而x的循環

a = ["word","worrd","worrrd","wordd"] 
alpha = ['d','r'] 
x = 0 
while x in range(0, len(alpha)): 
    # i should be reset here 
    i = 0 
    while i in range(0, len(a)): 
     if a[i].count(alpha[x]) > 1: 
      del(a[i]) 
      i = i - 1 
     else: 
      i = i + 1 
    x = x + 1 
print(a) 
+0

謝謝,不知道我怎麼樣錯過了。 :) –

0

這只是除了我剛添加I = 0後的方法首先while循環

a = ["word","worrd","worrrd","wordd"] 
alpha = ['d','r'] 
i = 0 
x = 0 
while x in range(0, len(alpha)): 
    i = 0 
    while i in range(0, len(a)): 
     if a[i].count(alpha[x]) > 1: 
      del(a[i]) 
      i = i - 1 
     else: 
      i = i + 1 
    x = x + 1 
print(a) 

['word'] 
+0

這也會錯誤地標記像「banana」這樣的詞。 – L3viathan

+0

@ L3viathan他想檢查d和r只有 – Shashank

+0

那麼,'騎手',那麼。 – L3viathan

2

短溶液使用re.search()功能:

import re 

a = ["word","worrd","worrrd","wordd"] 
result = [w for w in a if not re.search(r'([dr]).*\1', w)] 

print(result) 

輸出:

[word] 

([dr]).*\1 - 檢查正則表達式模式如果來自字符類[dr]一些字母發生至少兩次字

.*內 - 匹配0個或多個字符

\1 - 指向第一捕獲組(...)


另一個短的選擇是使用內置的all()功能:

a = ["word","worrd","worrrd","wordd"] 
alpha = ['d','r'] 
result = [w for w in a if all(w.count(c) == 1 for c in alpha)] 

print(result) 
+0

我想保留我的方法,但它只檢查alpha列表的第一個字符 –

+0

@EllisRourke,檢查我的替代方法 – RomanPerekhrest

0

什麼,你有可能是後,是當你有兩個d值:S或R: s連續。然後你想要一個正則表達式:

import re 

a = ["word","worrd","worrrd","wordd", "worded"] 
result = [w for w in a if not re.search(r'(dd)|(rr)', w) 

print(result)