2013-06-13 3 views
2

У меня есть эта строка кода, она помещает английские слова в текстовую строку (в данном случае лучник и лук) в список и использует целое число из числа слов (02 в этом случае), чтобы выяснить, сколько слов в строкеОбъяснение функции списка в python

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] я должен быть в состоянии исправить это сам

ответ

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.

+0

'S = after_at.split() [0: 0 +4 * K: 4]' это работает сейчас! отлично – Johnnerz

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'

Смежные вопросы