我有这行代码,它将英语行中的英语单词(在这种情况下为弓箭手和弓箭手)放入列表中,并使用单词数的整数(在这种情况下为02)找出其中有多少个单词线line = 09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000 ~ 10290474 n 0000 ~ 10718145 n 0000L = line.split()word = L[4:4 + 2 * int(L[3]):2]print(word)打印出来 ['archer', 'bowman']我想使用以另一种方式将单词分配给列表的代码行,我想将在'@'符号后出现的8位数字分配给其他列表。到目前为止,我已经获得了获取文件中8位数字数量的代码以及我的努力。(在这种情况下,8位数字的数量为003)pointer_num = re.findall(r'\b\d{3}\b', line)K = int(pointer_num[0])before_at, after_at = line.split('@')S = after_at.split()[0:0 +3 * K:3]S应该是8位数字的列表。尽管此代码将S输出为:['09640897', '~', '0000']这是正确的条目数,只是错误的条目数。如果有人可以解释,word = L[4:4 + 2 * int(L[3]):2]我应该可以自己更正
3 回答
慕后森
TA贡献1802条经验 获得超5个赞
L[4:4 + 2 * int(L[3]):2]
可以这样理解:
L[3]
返回列表中的第四个元素L
(例如'02')。
int(L[3])
返回int
字符串的L[3]
(例如2)。
4 + 2 * int(L[3])
返回int
,例如4 + 2 * 2 = 8。
L[4:8:2]
返回一个由元素的列表L[4]
通过L[7]
,由2跳过换句话说,[L[4], L[6]]
。通常L[start:stop:skip]
返回一个列表,该列表以开头L[start]
,恰好在之前结束L[stop]
。可以将其[start, stop)
视为半开间隔。最后一个数字skip
,导致列表跳过此数目的元素。
在此处的注释3,4,5中说明了有关Python切片如何对序列类型进行工作的完整规则。
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
L[3]
是02
。
int(L[3])
是 2
4 + 2 * int(L[3])
是 8
L[4:4 + 2 * int(L[3]):2]
是L[4:8:2]
指L
从索引4
到8
排除索引中的项目,其步骤为2
L[4]
是'archer'
和L[6]
是'bowman'
添加回答
举报
0/150
提交
取消