-1

リストのユーザー入力を読み取り、リストの要素がリスト内にあるかどうかを判断Aするアルゴリズムを作成する必要があります (発生した場合、プログラムは「はい」を出力し、そうでない場合は「いいえ」を出力する必要があります)。BBA

出発点となる次のコードを思いつきました。

n=int(input('Enter the length of list A '))
A=[]
for i in range (0,n):
    InpEl=int(input('Enter the elements '))
    A.append(InpEl)
print(A)
n=int(input('Enter the length of list B '))
B=[]
for i in range (0,n):
    InpEl2=int(input('Enter the elements '))
    B.append(InpEl2)
print(B)

checklist=B
for each in A:
    if each in checklist:
        print('YES')
    else:
         print('NO')

いずれにせよ、私は「いいえ」になります。ここでの間違いは何ですか?

また、後でリストを変更して、 の要素がに出現する順序でB発生するかどうかをプログラムが判断できるようにする必要がありますが、必ずしも連続しているとは限りません。AB

For example, let M be the length of B and N be the length of A.
Then the program should return yes if there are indices i0, i1...im+1 such that 0<= i0 < i1...< im-1 < N such that A[i0] = B[0];A[i1] = B[1]...A[im-1] =
B[m-1].

この種の要求を満たすループを構築する簡単な方法はありますか?

PS: ユーザー入力を整数だけでなく文字列も読み取れるようにすることは可能ですか? raw_inputPython 3.5 で役立つかどうかはわかりません。

PSS: 申し訳ありませんが、ここでコードを入力する際に​​小さな間違いを犯しました。今修正しました。別の質問: 各要素に対して複数の「はい」と「いいえ」の出力を取得します。

Enter the length of list A 3
Enter the elements 1
Enter the elements 2
Enter the elements 3
[1, 2, 3]
Enter the length of list B 3
Enter the elements 5
Enter the elements 4
Enter the elements 3
[5, 4, 3]
NO
NO
YES

発生した場合に1回だけyesとnoを1回だけ出力するようにコードを変更するにはどうすればよいですか?

4

2 に答える 2

1

これが1つの解決策です。以前にこの種の質問をしたことがある人は多いので、質問する前に周りを検索することをお勧めします。

a = input('enter list A with comma between each element: ')
b = input('enter list B with comma between each element: ')

a = a.split(',')
b = b.split(',')

contained_in_b = [element in b for element in a]

for i, in_b in enumerate(contained_in_b):
    print('element {} contained in list B: {}'.format(a[i], in_b))

生の入力をまとめて取得し、Python を使用してリストに分割することをお勧めします。このように、ユーザーが事前にリストの長さを指定する必要はありません。また、変換する必要はありませんint- 文字列比較は正常に機能します。

contained_in_belement in bリスト内包表記を使用します。これは、ブール値をそれぞれelementに適用する Python の便利な機能ですaenumerateこれで、目的の出力を印刷するために使用できる True/False 値のリストができました。

于 2016-12-21T20:14:33.003 に答える
0

得られる武器の 1 つはall演算子です。これは iterable 内のすべての項目が True であることを確認するだけです。

A = [1, 4, 6, 8, 13]
B = [4, 6, 13, 8]
C = [3, 8, 25]

master = [i for i in range(20)]

print all(i in master for i in A)
print all(i in master for i in B)
print all(i in master for i in C)

出力:

True
True
False

同様に順序を取得するには、ループを使用して最初のリストをステップスルーする反復メソッドに戻る必要がありますが、2 番目のリストのどこにいるかを知るためにインデックスを維持します。最初のリストの各値について、2 番目のリストの残りを調べて、アイテムを見つける (一時的な成功) か、最後まで到達する (失敗) まで続けます。

数値名を読み取って整数に変換することは、別の問題であり、コードが長くなります。

于 2016-12-21T20:15:43.267 に答える