我有这行代码,它将英文单词放在一个文本行(在本例中为archer和bowman)放入一个列表并使用单词数的整数(在本例中为02)来计算出有多少单词在行
line = 09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000 ~ 10290474 n 0000 ~ 10718145 n 0000
L = 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 out打印为:
['09640897', '~', '0000']
这是正确的条目数,只是错误的条目。如果有人可以解释word = L[4:4 + 2 * int(L[3]):2]
我应该能够自己纠正
答案 0 :(得分:4)
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
会导致列表跳过此数量的元素。
关于Python切片如何适用于序列类型的完整规则在Notes 3,4,5 here中进行了解释。
答案 1 :(得分: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
< / p>
L[4]
为'archer'
,L[6]
为'bowman'