Как получить элементы в списке, начиная с заданного условия - PullRequest
0 голосов
/ 30 августа 2018

Мой код:

 b=[1215316235,1215316234,1210216096,1210716053]
 for i in range(398):
    a=b[i]
    if a[0:5] == '12153':
        print(a)

Я получаю сообщение об ошибке:

TypeError                                 Traceback (most recent call last)
<ipython-input-113-d3b104ffc744> in <module>()
  1 for i in range(398):
  2     a=b[i]
 ----> 3     if a[0:5] == '12153':
  4         print(a)

  TypeError: 'int' object is not subscriptable

Как получить ожидаемый результат:

1215316235
1215316234

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Чтобы ваша логика работала, вам нужно преобразовать в str перед нарезкой. Кроме того, вы должны перебирать значения, а не диапазон, например, разрезая свой список.

Более эффективный подход - использовать понимание списка. Вот несколько примеров:

b = [1215316235, 1215316234, 1210216096, 1210716053]

import math

b = b*10000

%timeit [x[:5] == '12153' for x in map(str, b)]                # 22.4 ms per loop
%timeit [str(x)[:5] == '12153' for x in b]                     # 28.1 ms per loop
%timeit [x // 10**(int(math.log10(x))-4) == 12153 for x in b]  # 48.6 ms per loop
0 голосов
/ 30 августа 2018

Вы можете просмотреть индексы, набрав int в str.

b = [1215316235, 1215316234, 1210216096, 1210716053]
for i in map(str, b):
    if i[:5] == '12153':
        # this is a str; if you want an int change for spec above
        print(i) 

Я бы лично добавил это в функцию и убрал там жестко закодированный номер; хотя это зависит только от вас и от того, как вам это нужно.

0 голосов
/ 30 августа 2018

Вы можете преобразовать b, список целых чисел, в список строк сначала:

b = [1215316235, 1215316234, 1210216096, 1210716053]
c = map(str, b)
for i in range(398):
    a = c[i]
    if a[0:5] == '12153':
        print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...