Ошибка 'type' object is not subscriptable
относится к этому выражению:
int[0:]
Это бессмысленно, потому что вы не можете взять фрагмент типа int
.
Если говорить прямо, вся эта строка выглядит так, как будто она была сгенерирована каким-то случайным процессом:
if x in vendor == len(int[0:]) < 3:
x in vendor
всегда будет True
, поскольку вы делаете это внутри итерации, где каждое значение x
взято из vendor
, и я даже не могу догадаться, что len(int[0:]) < 3
предполагается тестировать. Помимо того, что вы пытаетесь нарезать int
, ваш срез берет все, что вы нарезаете, и все, что вы делаете, проверяет его len
, чтобы вы могли так же легко сделать len(whatever) < 3
, Я не могу понять, что должен делать этот код.
Итак, давайте попробуем построчно пройти описание проблемы, чтобы посмотреть, можно ли ее превратить в код:
Мне нужно перебрать первые 1 элементы в списке
Первый 1 элемент в списке - просто vendor[0]
. Это не итерация, потому что вы делаете это только один раз. Вы не говорите, что делаете с этим 1 элементом, поэтому мы можем в основном игнорировать эту строку.
, а затем проверьте, если следующие 7
Так что ' будет vendor[1:8]
...
начинаться с 3 или менее 6 цифр
3 само по себе меньше 6, поэтому мы можем просто сказать «меньше 6 ", правильно? Так что это было бы len(x) < 6 or not x[0:6].isdigit()
.
, если нет, пропустите каждый элемент, пока он не найдет правильный элемент, возьмите этот и следующие 6, чтобы получить в общей сложности 7 элементов, поместив каждую группу из 7 в новом подсписке.
Я думаю, что это затрудняет выполнение простой итерации for...in
, так как мы хотим получить фрагменты списка в зависимости от того, где мы находимся, поэтому итерация по индексам выглядит как путь к go.
Итак, все вместе на основе вашего описания, я думаю, что это:
sublist = []
i = 1 # skip the first element
while i < len(vendor):
if len(vendor[i]) >= 6 and vendor[i][0:6].isdigit():
# starts with 6 or more digits, skip this one
i += 1
continue
if len(vendor) - i < 7:
# don't have 7 items left to grab, so we're done
break
# grab the next 7 items and then skip ahead 7
sublist.append(vendor[i:i+7])
i += 7
С вашим примером ввода, который меня получает:
[['1', '2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '43.00 NC', '1', '1'], ['2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '43.00 NC', 'some stuff I dont want', '1', '1']]
Это не соответствует вашему примеру вывода, но в вашем описании сказано, что вы хотели, чтобы в вашем подсписке были группы по 7, а ваши примеры выходных групп по 6, поэтому я не знаю, что вам сказать.
А теперь для чего-то совершенно другого
После попытки в комментариях определить, что должен делать этот код, и с полным провалом я собираюсь просто рассмотреть проблему следующим образом:
from typing import List
def some_func(data: List[str]) -> List[List[str]]:
pass
sample_input = ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '4', '3.00', '43.00 NC', '1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3','43.00 NC', 'some stuff I dont want', '1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC']
sample_output = [['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '4', '3.00', '43.00 NC'], ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC'], ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC']]
assert some_func(sample_input) == sample_output
Класси c т Разработка на основе est - начните с теста, а затем напишите функцию, которая его удовлетворяет.
После небольшого разбора я натолкнулся на алгоритм «удалите все элементы без цифр, сгруппируйте оставшиеся элементы в семерки» :
from typing import List
def some_func(data: List[str]) -> List[List[str]]:
filtered = [i for i in data if any(c.isdigit() for c in i)]
return [filtered[i*7:(i+1)*7] for i in range(len(filtered) // 7)]
sample_input = ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '4', '3.00', '43.00 NC', '1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3','43.00 NC', 'some stuff I dont want', '1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC']
sample_output = [['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '4', '3.00', '43.00 NC'], ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC'], ['1','1','2', '11" Some Words symbols and numbers mixed 3-4-2#', '3.00', '3', '43.00 NC']]
assert some_func(sample_input) == sample_output # passes!