4

ファイルから読み取ったリストを処理する python スクリプトを作成しています。

l = readListFromFile( myFile )
for i in l :
    # do something to each element

l複数の要素がある場合、すべてが正常に機能します。
ただし、リストに要素が 1 つしかない場合は、リストではなくスカラーとしてreadFromFile返されます。lしたがってfor i in l、エラーで失敗します

オブジェクトは反復可能ではありません

私はを制御できませんreadFromFile。私の質問は、要素が1つしかないl場合でも、Pythonをalistとして扱うにはどうすればよいですか?l

4

5 に答える 5

2
l = readListFromFile(myFile)
if isinstance(l, list):
    for i in l :
        # do something to each element
else:
    #do that something mentioned above

また

l = readListFromFile(myFile)
if isinstance(l, str):
    l = [l]
for i in l:
    #do that same something as above

また

l = readListFromFile(myFile)
try:
    for i in l:
        #do that something
except:
    #do that something with the value

関数が必要な場合:

def get_me_a_list(var):
    if isinstance(var, list):
        return var
    return [var]

l = get_me_a_list(readListFromFile(myFile))
for i in l:
    #do your something
于 2013-09-15T16:01:19.700 に答える
1

ジェネレーター関数と の使用isinstance:

def solve(lis):
   if isinstance(lis, list):
      for item in lis:  #use just `yield from lis` in py3.x
         yield item
   else:
      yield lis

デモ:

>>> for item in solve(1):
...     print item
...     
1
>>> for item in solve([1, 2, 3]):
    print item
...     
1
2
3

任意のタイプのイテラブルを処理するには、次を使用できますcollections.Iterable

from collections import Iterable
def solve(lis):
   if isinstance(lis, Iterable) and not isinstance(lis, basestring):
      for item in lis:  #use just `yield from lis` in py3.x
         yield item
   else:
      yield lis
于 2013-09-15T16:06:52.157 に答える
0

readFromFileが ではなくスカラーを返す場合はlist、それをlist自分で に変えることができます。

l = readListFromFile( myFile )
if not isinstance(l, list):
    l = [l]
for i in l :
    # do something to each element
于 2013-09-15T16:08:53.797 に答える