2017-06-22 7 views
1

2つのリストを作成し、リスト間で共通の要素のみを含むリストを返すプログラムを作成する必要がありました。このリストオーバーラッププログラムは奇妙な出力を出しています

私のようにコードを書いた - 私のlist_1[1,2,3,4,5]で、私のlist _2[3,4,5,6,7,8,9]で、次に予想される出力は

[3,4,5]

する必要がある場合は、今すぐ

print('Please type in your list number 1') 
list_1=input() 

print('Great! Please type in your list number 2 ') 
list_2=input() 

commonlist=[] # this will be the list containing common elements. 


for i in range(len(list_1)): 
    if list_1[i] in list_2: 
     commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist 

print(commonlist) 

出力は

です

[ '['、 ' ''、 ' '3'、'、 ' '4'、'、'、 '5'、 ']']

なぜ午前この出力を得るには?

答えて

1

さて、私はそれをできるだけ簡単に説明しようとします。

input()には、stringという名前が付けられています。そして、必要なものに型キャストする必要があります。

これをあなたのPythonインタプリタで試してみてください。

>>> a=input() 
5 
>>> a+10 
Traceback (most recent call last): 
    File "<pyshell#15>", line 1, in <module> 
    a+10 
TypeError: Can't convert 'int' object to str implicitly 

なぜエラーがスローされるのですか?これはという強力な型付き言語と呼ばれます。 Pythonの意味はこれを許可していません。あなたが望むものを得るために、あなたはそれをあなたの望みのタイプに変更する必要があります。これを試して?

>>> a=input() 
5 
>>> int(a)+10 
15 
>>> 

int()を追加したので動作しました。これは型キャストです。今あなたの問題では、文字列として取得して使用しています。

これは、list(input())を使用してリストに変更する必要があると述べています。文字列の不要な空白があっても、

>>> a 
'1 2 3 4' 
>>> list(a) 
['1', ' ', '2', ' ', '3', ' ', '4'] 

この場合、split()を使用します。デフォルトでは、your_string.split()は空白で分割されたリストを返します。分割する区切り文字を指定することもできます。だからここlist()

>>> a 
'1 2 3 4' 
>>> a.split() 
['1', '2', '3', '4'] 

print('Please type in your list number 1') 
list_1=input().split() 
print(list_1) 
print('Great! Please type in your list number 2 ') 
list_2=input().split() 
print(list_2) 
commonlist=[] # this will be the list containing common elements. 


for i in range(len(list_1)): 
    if list_1[i] in list_2: 
     commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist 

print(commonlist) 

出力を使用する必要:

Please type in your list number 1 
1 2 3 4 
['1', '2', '3', '4'] 
Great! Please type in your list number 2 
2 3 5 6 
['2', '3', '5', '6'] 
['2', '3'] 

はあなたが私は、リスト内の共通の要素を見つけるために、この方法をお勧めしますが、あなたが望んだ参照してくださいません。もっと簡単です。

print('Please type in your list number 1') 
list_1=input().split() 

print('Great! Please type in your list number 2 ') 
list_2=input().split() 

commonlist = set(list_1)&set(list_2) 


print(list(commonlist)) 

commonlist =セット(list_1)&セット(list_2)が一列に終了します。それはPythonの方法で行います。簡単な方法。

注::これは、共通項目を順序通りに示しているわけではありません。しかし、あなたはすべてのものを手に入れます。

2

input()が文字列を返すため、その奇妙な出力が得られる理由があります。だからあなたはリストではなく文字列を繰り返しています。

あなたは入力から値のリストを作成するstr.split()を使用することによってこの問題を解決することができます

print('Please type in your list number 1') 
list_1=input().split() 

print('Great! Please type in your list number 2 ') 
list_2=input().split() 

あなたの入力が分離を空白する必要があります注意してください。順番は関係ない場合

はまた、サイドノートとして、あなたの代わりに、ここでset() Sを使用することができます。

>>> a = [1, 2, 3, 4] 
>>> b = [2, 6, 1, 8] 
>>> 
>>> set(a) & set(b) 
{1, 2} 
>>> 
+2

また、元のコードはpython2.7で有効な点である – VMRuiz

+0

@VMRuizを変更せずに動作します。しかし、私はOPがPython3を使用していたことはかなり明らかだったので、これを省略することにしました。また、Python2で 'input()'を使用するのは悪です;-) –

+0

もちろん、それはあなたの答えの中毒であって、苦情ではありませんでした – VMRuiz

1

input()strオブジェクトを返すので、これが起こります。したがって、文字列を反復処理すると、文字のリストとして扱われます。

投稿した形式でリストを入力する場合は、それを文字列として受け取る必要があります。次に、を解析して整数のリストを取得します。 strクラスのsplit()メソッドが役に立ちます。必要に応じて区切り文字を指定する必要があります。

1

入力()は、入力されたデータを文字列として保存します。その入力をリストに変換する必要があります。 プログラムにいくつかの変更を加える必要があります。

print('Please type in your list number 1(separated by ",") ') 
list_1=input().split(",") 

print('Great! Please type in your list number 2(separated by",")') 
list_2=input().split(",") 

commonlist=[] # this will be the list containing common elements. 


for i in range(len(list_1)): 
    if list_1[i] in list_2: 
     commonlist.append((list_1[i])) # this will put the common elements between the two lists in commonlist 

print(commonlist) 

リスト入力には2つの数字の間に "、"を付ける必要があります。 例: 23,45,67,54,67