我正在寻找一个变体来确定字符串列表中的字符(" b")是否使用嵌套循环跟随某个字符(" a")。然后,程序应计算上述条件的字符串总数。
我已经编写了以下代码,可以使用.find
nStrings = int ( input ( "input n amount of strings: " ))
listStr = [ ]
sumStr = 0
for i in range (0, len(nStrings)):
newStr = input ("enter string: ")
listn.append(newStr)
for i in range (0, len(listStr)):
if listn[i].find("a") < listn[i].find("b"):
sumStr = sumStr + 1
print("sumStr")
但是,我正在寻找一种使用嵌套循环的方法。
目前我的方法是
for i in range (0, len(listStr)):
if listStr[i] == "a":
foundA = i
for j in range (i+1, len(listStr)):
if list[j] == "b":
foundB = j
if foundA < foundB:
afterA = True
然而,这对我来说根本不起作用。如果尝试了一些变体,但我确定我犯了一个逻辑错误。
答案 0 :(得分:0)
我不会使用嵌套的for
循环进行此比较,而是可以使用str.find()
方法(正如@ cricket_007指出的那样,是一个隐含的循环):
def getinput():
nStrings = int(input("inuput n amount of strings:"))
l = []
for i in range(nStrings):
l.append(input('enter string\n'))
return l
def compare(itm):
if 'a' in itm and 'b' in itm:
return True if itm.find('a') < itm.find('b') else False
else:
return None
listStr = getinput()
print zip(listStr, map(compare, listStr))
给定输入:['David', 'alphabet', 'bagpipes']
,这应该返回列表中的元组:
[('David', None), ('alphabet', True), ('bagpipes', False)]
答案 1 :(得分:0)
您可以使用一个循环
letter1 = "a"
letter2 = "b"
for i in range (0, len(listStr)):
if listStr[i] == letter1:
pos1 = i
if listStr[i] == letter2:
pos2 = i
foundAfter = (pos2 > pos1) # an error is here if the letters weren't found at all
答案 2 :(得分:0)
这是一个函数的实现,用于检查字符串中statement calc(code)
之后是否发生b
:
a
要避免使用def a_before_b(haystack):
found_a = False
for letter in haystack:
if letter == 'a':
found_a = True
elif letter == 'b' and found_a: # we found 'b' and already have found 'a' earlier
return True
return False
,请使用此方法代替行
.find()
代码中的,如下所示:
if listn[i].find("a") < listn[i].find("b"):