2

我有这行代码,它将文本行中的英文单词(在本例中为弓箭手和弓箭手)放入列表中,并使用单词数的整数(在本例中为 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 打印为:

['09640897', '~', '0000']

这是正确的条目数,只是错误的条目数。如果有人可以解释word = L[4:4 + 2 * int(L[3]):2]我应该可以自己纠正

4

2 回答 2

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 切片如何适用于序列类型的完整规则在此处的注释 3、4、5中进行了解释。

于 2013-06-13T10:31:56.260 回答
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]L4包含的索引项到8排除的索引项,步骤为2

L[4]'archer'L[6]'bowman'

于 2013-06-13T10:33:48.357 回答