我的代码是:
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
答案 0 :(得分:3)
为使逻辑起作用,您需要在切片之前转换为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
答案 1 :(得分:1)
您可以先将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)
答案 2 :(得分:1)
键入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)
我会亲自将其添加到函数中并删除其中的硬编码数字;尽管这完全取决于您以及您如何使用它。