在python中解释列表函数

时间:2013-06-13 10:24:14

标签: python

我有这行代码,它将英文单词放在一个文本行(在本例中为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]我应该能够自己纠正

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'