2017-02-16 15 views
-1

私は3つの引数を必要とする関数を定義しました。そのうちの1つはリストでなければなりません。 私が見つけた1つの解決策は、リストが整数で構成されている場合にのみ機能します。必ずしもそうである必要はありません(同じリスト内でタイプが異なる可能性があります)。 ユーザーからリストタイプの入力を要求するにはどうすればよいですか?例:[1,2,3]のようなものが入力された場合、リストとみなされますか?Pythonでユーザにリスト入力を要求する方法は?

+3

読む[ast.literal_eval(https://docs.python.org/2/library/ast.html約#ast.literal_eval) – dawg

+0

質問との関係は何ですか? –

+0

は質問です。ユーザーからのリストタイプ入力をリクエストする方法は? – gregory

答えて

0

は、ここに1つの方法です:

$ cat foo.py 
import sys 
input1 = sys.argv[1] 
input2 = sys.argv[2] 
print('Before\n-------') 
print('input1:{},type_of_input1:{}'.format(input1, type(input1))) 
print('input2:{},type_of_input2:{}'.format(input2, type(input2))) 
print('After\n-------') 
input1 = input1.split(' ') 
print('input1:{},type_of_input1:{}'.format(input1, type(input1))) 
print('input2:{},type_of_input2:{}'.format(input2, type(input2))) 
$ 

実行出力

$ python foo.py 'foo bar' bat 
Before 
------- 
input1:foo bar,type_of_input1:<type 'str'> 
input2:bat,type_of_input2:<type 'str'> 
After 
------- 
input1:['foo', 'bar'],type_of_input1:<type 'list'> 
input2:bat,type_of_input2:<type 'str'> 
$ 
-1

あなたは完全にユーザーの入力を信頼する場合は、あなただけeval()を使用することができます。ユーザーと仮定すると、文字列を入力し[1, 2, 3]

x = input() # Python 3, use raw_input for Python 2 
y = eval(x) # Dangerous, don't use with untrusted input 

print(y) 
# [1, 2, 3] 

print(len(y)) 
# 3 

更新:

ast.literal_evalはこちらの方が適しています。

import ast 

x = input() # Python 3, use raw_input for Python 2 
y = ast.literal_eval(x) 

print(y) 
# [1, 2, 3] 

print(len(y)) 
# 3 
+1

' eval'は危険なアイデアです...誰かが '__import __ rmtree' – donkopotamus

+0

それで、私はそれが私の答えでは危険だと言いました。スクリプトが作成者によってインタラクティブに実行されることが意図されているのであれば、それはシェルプロンプトよりも危険ではありません。 – Scovetta

+0

しかし、なぜこのような場合に 'ast.literal_eval'の代わりに' eval'を提案するのですか? – donkopotamus

0

使用ast.literal_eval

import re 
re.sub("[^\w]", " ", input('-->')).split() 
-->This is a string of words converted into a list 

output: 

['This', 'is', 'a', 'string', 'of', 'words', 'converted', 'into', 'a', 'list'] 

inputは、ビルトインされ

import ast 
while True: 
    s=raw_input("Enter a list: ") 
    s=ast.literal_eval(s) 
    if not isinstance(s, list): 
     print "Nope! {} is a {}".format(s, type(s)) 
    else: 
     break 
print s 

optioが必要な場合ユーザisinstancetupleを追加する(例えば、1,2,3を入力することによって)タプルを入力するN:

import ast 
while True: 
    s=raw_input("Enter a list: ") 
    s=ast.literal_eval(s) 
    if not isinstance(s, (list, tuple)): 
     print "Nope! {} is a {}".format(s, type(s)) 
    else: 
     break 
関連する問題