在Python循环中查找第一个数字索引?
这是我发现的一个简单程序,它处理在输入字符串中查找第一个数字的问题。我很难理解的是 如果输入字符串[position].isdigit: 找到=真在Python循环中查找第一个数字索引?,python,loops,while-loop,digits,Python,Loops,While Loop,Digits,这是我发现的一个简单程序,它处理在输入字符串中查找第一个数字的问题。我很难理解的是 如果输入字符串[position].isdigit: 找到=真 这个表达式具体说明了什么,特别是inputString[position]部分。我们是在寻找第一个数字的位置/索引值,然后将循环分解为下面的print语句吗?python中的字符串可以用作序列,这意味着您可以使用索引访问其元素。例如: 维克托[0]是V 因此,在您的示例中,您正在检索字符串的一个元素字符。函数isdigit是一种字符串方法,它可以检查
这个表达式具体说明了什么,特别是inputString[position]部分。我们是在寻找第一个数字的位置/索引值,然后将循环分解为下面的print语句吗?python中的字符串可以用作序列,这意味着您可以使用索引访问其元素。例如: 维克托[0]是V 因此,在您的示例中,您正在检索字符串的一个元素字符。函数isdigit是一种字符串方法,它可以检查该字符是否为数字。位置是迭代变量,就像for循环中一样。所以每次你找不到一个数字,你就转到字符串中的下一个字符 inputString[position]读取位置在字符串中的位置。因此,如果您的字符串是abcdefg,那么inputString[2]=c而不是b,因为python从0开始计数 .isdigit然后查看此位置是否为数字。如果是数字,则find=True,while循环停止。否则就继续下去
循环结束后,函数将根据inputString中是否有数字打印两条消息中的一条。您正在查找位置处inputString的值。position首先初始化为零,然后在循环每个position notice position+=1时查看它是否为.isdigit 我们是否在寻找第一个数字的位置/索引值,以及 然后将循环分解为下面的print语句 是的,没错。它中断是因为一旦找到一个数字,在下一次迭代中whilenotfound条件将给出whilefalse并中断while循环。值得注意的是,存在短路,因此第二个条件甚至未进行评估 如果找不到一个数字,位置将递增,直到它等于列宁PutString,此时while循环通过第二个条件中断,即位置<列宁PutString 编写while循环的一种更具Pythonic/惯用的方法是通过for循环和枚举: 注意,在这个解决方案中,由于我们从1开始计数,我们可以利用这样一个事实:如果找到一个数字,它必须是真实的,即非零。因此,我们不需要额外找到的变量。inputString[position]给出inputString中位置处的字符。例如,如果inputString=Foobar且position=3,则inputString[position]=b
当我们以这种方式找到一个数字时,则find变为True,while的计算条件变为False。程序离开循环并打印。收集所有可能数字的索引,如果列表不为空,则打印0索引,否则如果列表为空,则打印无数字语句
for idx, val in enumerate(inputString, 1):
if val.isdigit():
position = idx
break
else:
position = 0
if position:
print('first digit is at position', position)
else:
print('There are no digits in the string')
@让·弗朗索瓦·法布为什么不呢?在下一次迭代中,条件变为false,因为find变为true,循环中断,它迭代字符串,一旦得到一个数字,它就返回。correct。我没看到。这是一个红旗,表示不要使用while循环hi@VictorVasiliev,欢迎使用stackoverflow!不幸的是,你的答案有一些问题。尽管你大体上是正确的,但你误用了几个术语。我将编辑您的文本,使其在技术上更加正确。您是否认为将位置设置为1而不是0更方便,以避免混淆用户,因为编译器从0开始计数?这是一个偏好问题。您可以从1开始,然后检查位置
for idx, val in enumerate(inputString, 1):
if val.isdigit():
position = idx
break
else:
position = 0
if position:
print('first digit is at position', position)
else:
print('There are no digits in the string')
lst = [i for i, v in enumerate(s) if v.isdigit()]
if len(lst):
print(f'First digit is at postion {lst[0]}')
else:
print('There are no digits in the string.')