2012-01-22 787 views
7

Làm thế nào để bạn xác minh rằng loại của tất cả các phần tử trong một danh sách hoặc một bộ dữ liệu giống nhau và thuộc một loại nhất định?Kiểm tra loại phần tử python tuple/list

ví dụ:

(1, 2, 3) # test for all int = True 
(1, 3, 'a') # test for all int = False 

Trả lời

26
all(isinstance(n, int) for n in lst) 

Demo:

In [3]: lst = (1,2,3) 

In [4]: all(isinstance(n, int) for n in lst) 
Out[4]: True 

In [5]: lst = (1,2,'3') 

In [6]: all(isinstance(n, int) for n in lst) 
Out[6]: False 

Thay vì isinstance(n, int) bạn cũng có thể sử dụng type(n) is int

+6

Các OP nên cảnh báo rằng điều này có thể dẫn đến hành vi bất ngờ trong Python 2, bởi vì isinstance (10 ** 100, int) == False. Bạn cần phải làm isinstance (n, (int, long)). Nhưng trong Python, cần phải kiểm tra loại của một cái gì đó thường là một dấu hiệu của một lỗi thiết kế để bắt đầu với. – DSM

+2

Ngoài ra, 'type()' trả về '' cho các lớp kiểu cũ. – Gandaro

4
all(isinstance(i, int) for i in your_list)) 
4

Tùy thuộc vào những gì bạn đang làm nó có thể được thêm Pythonic để sử dụng duck typing. Bằng cách đó, những thứ giống như int (như phao, vv) có thể được truyền đi cũng như ints. Trong trường hợp này, bạn có thể thử chuyển đổi từng hạng mục trong tuple một int, và sau đó bắt bất kỳ trường hợp ngoại lệ phát sinh:

>>> def convert_tuple(t, default=(0, 1, 2)): 
...  try: 
...   return tuple(int(x) for x in t) 
...  except ValueError, TypeError: 
...   return default 
... 

Sau đó, bạn có thể sử dụng nó như vậy:

>>> convert_tuple((1.1, 2.2, 3.3)) 
(1, 2, 3) 
>>> convert_tuple((1.1, 2.2, 'f')) 
(0, 1, 2) 
>>> convert_tuple((1.1, 2.2, 'f'), default=(8, 9, 10)) 
(8, 9, 10)