我有一个清单:
my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]
此列表在整个计划中得到更新。每次更新时,我都要查看它是仅包含数字还是仅包含字符串,或两者都包含。我可以用它做什么?
我需要检查列表中的所有元素。有什么建议吗? **
**有关代码如何工作的说明,请
谢谢大家的帮助。感谢您的帮助。
答案 0 :(得分:8)
>>> my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]
>>> set(map(type, my_list))
{<class 'int'>, <class 'str'>}
>>> set(map(type, my_list)) == {int, str}
True
>>> set(map(type, my_list)) == {int}
False
>>> set(map(type, my_list)) == {str}
False
>>> my_list = [12,8,0,4,7,21,27]
>>> set(map(type, my_list))
{<class 'int'>}
>>> my_list = ["X", "O", "X", "X"]
>>> set(map(type, my_list))
{<class 'str'>}
>>> set(map(type, my_list)) == {str}
True
type
返回对象的类型:
>>> type(1)
<class 'int'>
>>> type('X')
<class 'str'>
map(type, seq)
将type
应用于seq
:
>>> map(type, [1, 2, 3, 'X'])
<map object at 0x7fc763de6e90>
>>> list(map(type, [1, 2, 3, 'X']))
[<class 'int'>, <class 'int'>, <class 'int'>, <class 'str'>]
>>> # Using `set`, you can get unique types.
>>> set(map(type, [1, 2, 3, 'X']))
{<class 'int'>, <class 'str'>}
注意(@ lvc的评论)
如果你碰巧有
int
或str
的子句,这将会中断 名单。具体而言,这些类可能不太可能,但是 这意味着它没有很好地概括。
答案 1 :(得分:2)
使用isinstance
和all
的组合:
>>> all(isinstance(x, (int, str)) for x in my_list)
True
答案 2 :(得分:1)
isinstance函数告诉元素x是否是类的实例。因此,isinstance(2,int)的计算结果为true。
使用map我们可以将isinstance应用于列表的每个成员,生成包含结果的列表。所以:
map(lambda x: isinstance(x, int), my_list)
评估为:
[True, True, True, True, True, True, True, False, True, True, False, False, False, False]
如果你只是想知道列表中是否有字符串,你可以这样做:
True in map(lambda x: isinstance(x, str), my_list)
答案 3 :(得分:1)
您可以使用any()
:
my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]
if any(isinstance(i, (str, int)) != True for i in my_list):
print "There is something else in the list!"
any()
语句相当于:
def any(iterable):
for element in iterable:
if element:
return True
return False
所以,代码相当于:
for item in my_list:
if not isinstance(i, (str, int)):
print item, "is not a string or list!"
break
答案 4 :(得分:1)
我认为filter
更合适。
result = filter(lambda x: isinstance(x, int), my_list)
if result: print 'find integer'
答案 5 :(得分:1)
只是为了另一种选择:
totint = sum(isinstance(x, int) for x in my_list)
if totint == 0:
print "all are strings"
elif totint == len(my_list):
print "all are ints"
else:
print "mixed"
答案 6 :(得分:1)
另一种选择,应该比扫描整个清单更快:
if not any(isinstance(x, int) for x in my_list):
print "all are strings"
elif not any(isinstance(x, str) for x in my_list):
print "all are ints"
else:
print "mixed"
甚至更好:
if any(isinstance(x, int) for x in my_list):
if any(isinstance(x, str) for x in my_list):
print "mixed"
else:
print "all are ints"
else:
print "all are strings"