我正在編寫的python程序的一部分似乎在循環一段時間。程序中不工作的部分在下面。它應該從用戶請求一個字符串並創建一個二維列表,其中字符串的每個不同字符都放在其自己的子列表中。 (希望這是有道理的......如果不是我可以嘗試解釋更好。也許代碼將幫助)如何修復似乎在做額外循環的python程序?
def getInput(emptyList):
inputString = input("Please enter a sentence:\n").strip().upper()
functionList = [x for x in inputString]
emptyList.extend(functionList)
return 0
def sortList(listA,listB):
listA.sort()
currentElement = listA[0]
compareTo = listA[0]
elementsCounted = 0
i = 0
listB.append([])
while elementsCounted < len(listA):
while currentElement == compareTo:
listB[i].append(currentElement)
elementsCounted += 1
print(listB)
if elementsCounted < len(listA):
currentElement = listA[elementsCounted]
else:
break
if currentElement != compareTo:
i += 1
listB.append([])
compareTo = listA[i]
return 0
def main():
myList = list()
sortedList = list()
getInput(myList)
sortList(myList,sortedList)
print(sortedList)
main()
如果用戶輸入qwerty
,該程序返回[['E'], ['Q'], ['R'], ['T'], ['W'], ['Y']]
這是正確的,但如果用戶輸入qwwerrty
的程序返回[['E'], ['Q'], ['R', 'R'], [], ['T'], ['W', 'W'], [], ['Y']]
。注意每個「雙」字符後的多餘空列表。看起來循環正在進行一次額外的迭代,或者listB.append([])
之前的if
語句未正確編寫。
我似乎無法弄清楚這一點。預先感謝您的幫助。
注意:elementsCounted
應該是從listA處理的每個元素的累計計數。 i
是listB中當前元素的索引。例如,如果['A','A','B']
是listA並且程序正在處理第二個A,則它是第二個正在計數的元素,但i
仍然爲0,因爲它屬於listB [0]。 currentElement
是當前正在處理的一個,它正在與作爲「我」處理的第一個元素進行比較。因爲'B'屬於下一個子列表,因此我們只需要一個。
爲什麼你有獨立的'elementsCounted'和'i'變量?它看起來像你總是希望'currentElement'和'compareTo'是相鄰的元素,但你讓它們不同步。您應該使用較少容易出錯的方式迭代元素對。 Google'Python成對地遍歷列表'以找到一些替代方案。 – user2357112
我更新了這個問題,試圖解釋變量的用法。我會谷歌,看看我能找到什麼。 – Jacob
這聽起來像你試圖做的事情可以通過使用itertools.Counter導入來實現。如果你傳遞一個字符串,你會得到每個字母發生多少次的字典。 – Shadow