我正在尝试创建一个定义一个函数:
ex:count_digit_leading_lines ("AAA\n1st") → 1 # 2nd line starts w/ digit
1
到目前为止,我的代码看起来像这样,但我无法弄清楚如何只检查每个拆分字符串中的第一个索引:
def count_digit_leading_lines(text):
for line in range(len(text.split('\n'))):
for index, line in enumerate(line):
if 0<=num<=9:
return index
它接受争论文本,它遍历每一行(新的分裂字符串),我认为它只是检查第一个索引,但这是我迷路的地方......
答案 0 :(得分:0)
这应该这样做:
texts = ["1\n2\n\3", 'ABC\n123\n456\n555']
def _get_index_if_matching(text):
split_text = text.split('\n')
if split_text:
for line_index, line in enumerate(split_text):
try:
num = int(line[0])
if 0 < num < 9:
return line_index
except ValueError:
pass
for text in texts:
print(_get_index_if_matching(text))
它将返回0
,然后返回1
答案 1 :(得分:0)
代码应该简单:
text=text.strip() #strip all whitespace : for cases ending with '\n' or having two '\n' together
text=text.replace('\t','') #for cases with '\t' etc
s=text.split('\n') #Split each sentence (@ '\n')
#s=[words.strip() for words in s] #can also use this instead of replace('\t')
for i,sentence in enumerate(s):
char=sentence[0] #get first char in each sentence
if char.isdigit(): #if 1st char is a digit (0-9)
return i
<强>更新强>
刚刚注意到OP对另一个答案的评论,说明你不想在你的代码中使用enumerate
(虽然它是使用枚举的好习惯)。因此for
循环修改后的版本 没有枚举 是:
for i in range(len(s)):
char=s[i][0] #get first char in each sentence
if char.isdigit(): #if 1st char is a digit (0-9)
return i
答案 2 :(得分:-1)
您可以为yield
更改def count_digit_leading_lines(text):
for index, line in enumerate(text.split('\n')):
try:
int(line[0])
yield index
except ValueError: pass
# Usage:
for index in count_digit_leading_lines(text):
print(index)
# Or to get a list
print(list(count_digit_leading_lines(text)))
语句,使您的函数成为生成器。然后你可以在一个循环中逐个获取索引,或者将它们变成一个列表。这是你可以做到的一种方式:
In : list(count_digit_leading_lines('he\n1\nhto2\n9\ngaga'))
Out: [1, 3]
示例:
$names = $collection->pluck('name');