2016-12-21 113 views
-1

我需要創建一個算法,它將讀取列表AB的用戶輸入,並確定列表B中的元素是否出現在列表A中(如果它們發生,程序需要打印'是',否則'打印')。如何找到發生在另一個列表中的任意列表中的元素(保留其順序)?

我想出了下面的代碼應該可以是一個起點:

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元素出現在它們出現在B順序A,但不一定連續。

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]. 

有沒有更簡單的方法來構建滿足這種請求的循環?

P.S .:是否有可能讓用戶輸入的內容不僅是整數,而且是字符串?我不確定raw_input在Python 3.5中是否有用。

P.S.S: 對不起,我在這裏輸入了代碼時犯了一個小錯誤,現在我修好了。 另一個問題:我得到的多是,沒有對每個元素的輸出:

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 

如何修改代碼,以便將只打印yes和no只有一次任意occurencies的情況下發生的呢?

+1

'checklist = B' not'[B]' – tihom

+0

*「讓用戶輸入的內容不僅僅是整數,而是字符串?」 - 什麼?您明確地將字符串轉換爲整數。也許......不? – jonrsharpe

+0

'checklist = [B]'在名爲'checklist'的新列表(它將只包含**一個**元素,整個'B'列表)中使'B'成爲嵌套列表。 – martineau

回答

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_b使用列表理解 - Python的一個方便的功能,該功能將布爾值element in b應用於a中的每個element。現在你有一個True/False值列表,你可以通過enumerate來打印所需的輸出。你

0

一個武器是所有運營商,只檢查所有在迭代的項目都是真實的:

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 

爲了獲得訂單爲好吧,你需要退回到迭代方法,用循環遍歷第一個列表,同時你維護一個索引來知道你在哪裏。對於第一個列表中的每個值,請通過第二個列表中的其餘列表,直到找到項目(臨時成功)或結束(失敗)。

讀取數字名稱並將它們轉換爲整數是一個單獨的問題,代碼更長。

相關問題