在 Python 循环中查找第一个数字索引?
Finding first digit index in Python loop?
found = False
position = 0
while not found and position < len(inputString):
if inputString[position].isdigit():
found = True
else:
position += 1
if found:
print('first digit is at position', position)
else:
print('There are no digits in the string')
这是我发现的一个简单程序,用于查找输入字符串中的第一个数字。我无法理解的是...
if inputString[position].isdigit():
found = True
这个表达式到底说明了什么,特别是 inputString[position]
部分。我们是否在寻找第一个数字的 position/index 值,然后将循环分解为下面的打印语句?
python中的字符串可以作为一个序列使用,这意味着您可以使用索引来访问它的元素。例如:
"Victor"[0]
是 V.
所以在您的示例中,您正在检索字符串的元素(字符)之一。函数 isdigit()
是一个字符串方法,可以检查该字符是否为数字。
position
是您的迭代变量,就像在 for
循环中一样。因此,每次找不到数字时,您都会转到字符串中的下一个字符。
inputString[position]
读取 position
在字符串中的位置。因此,如果您的字符串是 abcdefg
,那么 inputString[2]= c
(不是 b
,因为 python 从 0 开始计数)。
然后.isdigit()
看这个位置是不是数字。如果是数字,则 found = True
并停止 while 循环。 (否则继续。)
循环结束后,函数根据 inputString
中是否有数字打印两条消息之一。
您正在寻找 inputString
在位置 position
的值。 position
首先初始化为零,然后while循环每个位置(注意position += 1
)看是否.isdigit()
.
Are we looking for the position/index value of the first digit and
then breaking the loop into the print statement below?
是的,没错。它会中断,因为一旦找到一个数字,在下一次迭代中 while not found
条件将给出 while False
并中断 while
循环。值得注意的是 and
短路,因此甚至没有评估第二个条件。
如果未找到数字,position
递增直到等于 len(inputString)
,此时 while
循环通过第二个条件中断,即 position < len(inputString)
.
编写 while
循环的更 Pythonic / 惯用方式是通过 for
循环和 enumerate
:
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')
注意,在这个解决方案中,由于我们从 1 开始计数,我们可以利用这一事实,如果找到一个数字,它必须是 "Truthy",即非零。因此,我们不需要额外的 found
变量。
inputString[position]
给出 inputString 中位置的字符。例如,如果 inputString = "Foobar" 且 position = 3,则 inputString[position] = "b"。
当我们这样找到一个数字时,则found变为True,while的求值条件变为False。程序离开循环并打印。
收集所有可能数字的索引,如果列表不为空,则打印 0
索引,否则如果列表为空,则打印您的无数字声明。
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.')
found = False
position = 0
while not found and position < len(inputString):
if inputString[position].isdigit():
found = True
else:
position += 1
if found:
print('first digit is at position', position)
else:
print('There are no digits in the string')
这是我发现的一个简单程序,用于查找输入字符串中的第一个数字。我无法理解的是...
if inputString[position].isdigit():
found = True
这个表达式到底说明了什么,特别是 inputString[position]
部分。我们是否在寻找第一个数字的 position/index 值,然后将循环分解为下面的打印语句?
python中的字符串可以作为一个序列使用,这意味着您可以使用索引来访问它的元素。例如:
"Victor"[0]
是 V.
所以在您的示例中,您正在检索字符串的元素(字符)之一。函数 isdigit()
是一个字符串方法,可以检查该字符是否为数字。
position
是您的迭代变量,就像在 for
循环中一样。因此,每次找不到数字时,您都会转到字符串中的下一个字符。
inputString[position]
读取 position
在字符串中的位置。因此,如果您的字符串是 abcdefg
,那么 inputString[2]= c
(不是 b
,因为 python 从 0 开始计数)。
然后.isdigit()
看这个位置是不是数字。如果是数字,则 found = True
并停止 while 循环。 (否则继续。)
循环结束后,函数根据 inputString
中是否有数字打印两条消息之一。
您正在寻找 inputString
在位置 position
的值。 position
首先初始化为零,然后while循环每个位置(注意position += 1
)看是否.isdigit()
.
Are we looking for the position/index value of the first digit and then breaking the loop into the print statement below?
是的,没错。它会中断,因为一旦找到一个数字,在下一次迭代中 while not found
条件将给出 while False
并中断 while
循环。值得注意的是 and
短路,因此甚至没有评估第二个条件。
如果未找到数字,position
递增直到等于 len(inputString)
,此时 while
循环通过第二个条件中断,即 position < len(inputString)
.
编写 while
循环的更 Pythonic / 惯用方式是通过 for
循环和 enumerate
:
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')
注意,在这个解决方案中,由于我们从 1 开始计数,我们可以利用这一事实,如果找到一个数字,它必须是 "Truthy",即非零。因此,我们不需要额外的 found
变量。
inputString[position]
给出 inputString 中位置的字符。例如,如果 inputString = "Foobar" 且 position = 3,则 inputString[position] = "b"。
当我们这样找到一个数字时,则found变为True,while的求值条件变为False。程序离开循环并打印。
收集所有可能数字的索引,如果列表不为空,则打印 0
索引,否则如果列表为空,则打印您的无数字声明。
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.')