16

オブジェクトが文字列のリストかどうかを確認する方法は? オブジェクトが文字列であるかどうかのみを確認できました。

def checktype(obj):
  if isinstance(obj,str):
    print "It's a string"

obj1 = ['foo','bar','bar','black','sheet']
obj2 = [1,2,3,4,5,'bar']
obj3 = 'bar'

for i in [obj1,obj2,obj3]:
  checktype(i)

望ましい出力:

It's a list of strings
It's not a list of strings or a single string
It's a single string
4

6 に答える 6

19

リスト内のすべての項目が文字列かどうかをテストするには、allビルトインとジェネレーターを使用します。

if all(isinstance(s, str) for s in lis):

ただし、リストが空の場合でも、True技術的には 0 文字列のリストであるため、これは返されることに注意してください。[]ただし、 であると見なしたいのでFalse、次のようにする必要があります。

if lis and all(isinstance(s, str) for s in lis):

したがって、関数は次のようになります。

def checktype(obj):
    # This if statement makes sure input is a list that is not empty
    if obj and isinstance(obj, list): 
        return all(isinstance(s, str) for s in obj)
    else:
        return False

Trueこの関数は、入力が空ではなく、完全に文字列で構成されるリストである場合にのみ戻ります。それ以外 ( []['a', 1]('a', 'b')など) を指定すると、 が返されFalseます。

また、この方法で使用すると、(文字列ではない)all返された最初の項目のチェックを停止するという追加のボーナスがあります。Falseこれにより、非常に大きなリストを非常に効率的に操作できます。

于 2013-08-28T18:04:59.813 に答える
1

ワンライナーとして:

assert all(map(lambda x: isinstance(x, str), my_list))
于 2021-11-11T10:30:43.367 に答える