我正在编写的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