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]リストの 4 番目の要素を返します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]リストを返します。半開区間と考えてください。最後の numberにより、リストはこの要素数だけスキップされます。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]のアイテムを意味し、ステップは次のとおりです。L482

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

于 2013-06-13T10:33:48.357 に答える