2017-07-17 21 views
0

私はこの問題を解決しようとしていた。文字列リストを適切なリストに変換するには?

2つのリストを受け取り、最初のリストのすべての要素を引い二つのリストの間のすべての共通の要素を含むリストを返すプログラムを書きます。

コード部分は非常に単純です。ここでは、次のとおりです。私はここに直面

list1=input() 
list2=input() 

for i in list1: 
    if i in list2: 
    list1.remove(i) 
    else: 
    pass 

print(list1) 

問題がlist1list2が文字列であるということです。 list1=‘[1,2,3,4]’とする。

list1[1,2,3,4]に変換する必要があります。

How to convert list to string に示唆されているようにsplit()join()メソッドを試しましたが失敗しました。

'[1,2,3,4]'[1,2,3,4]に変換するにはどうすればよいですか?

+0

を使用する必要があります。http://pythoncentral.io/cutting-and-slicing-strings-in-python/ – fdsa

+1

ありこれ[ここ](https://stackoverflow.com/questions/1894269/convert-string-representation-of-list-to-list-in-python)の答え。新しい質問をする前に問題を検索してください。 –

+0

@ 9.0大変申し訳ございません。私は問題をGoogle検索したが、私は解決策を見つけることができませんでした。私の悪い –

答えて

2

あなたは2つのオプションがあり、あなたはjsonとしてそれをロードすることができます。

import json 
json.loads('[1,2,3,4]') 
# [1, 2, 3, 4] 

それともast.literal_eval

from ast import literal_eval  
literal_eval('[1,2,3,4]') 
# [1, 2, 3, 4] 
+0

答えをありがとう!それらのうちの1つを他のものよりも使用することに利点はありますか? –

+1

'json.loads()'は 'ast.literal_eval()'(Py3.6)よりも驚くほど速いです。 – AChampion

+2

少し異なります。ちょうど指摘されたパフォーマンス側@AChampionを除いて。 json.loadsのバージョンでは、引用符についてより制限があります。たとえば、jsonが単一引用符を有効な引用符文字として受け入れないため、値を一重引用符で囲むことはできません。ですから、ast.literal_evalはもう少し一般的かもしれません。 – Psidom

3

評価と安全ですastモジュールを使用して文字列を、文字列を評価することができます。

import ast 
ast.literal_eval('[1, 2, 3, 4]') 
=> [1, 2, 3, 4] 
+0

「安全」とはどういう意味ですか? ast.literal_eval()よりも驚くほど速いjson.loads()を使用することはできませんか? –

+1

@AaryanDewan 'eval()'を使用するのとは対照的に安全です。これは '' eval() ''が入力(不正コードを含む可能性があります)を検証しないで '' literal_eval詳細は、この[post](https://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval)を参照してください。 –

-3

あなたはいけない。この場合の入力 にも、このユースケースのためにおそらく許容カンマ

list1=list(input()) 
list2=list(input()) 
+0

これはバグの原因になります。 –

+1

これは動作しません。 'input()'は、文字列内のすべての文字を含む文字列を返します。 '[" ""、 "["、 "1"、 "、"、...] '探しているものではありません。 – AChampion

+0

どのような種類ですか?私はちょうど試しました['1'、 '2'、 '3'、 '4']これはinpoutで返されたものです1234 – oToMaTiX

関連する問題