0

(長さが異なる) 2 つのリストがあります。一方はプログラム全体で変化し ( list1)、もう一方 (より長い) は変化しません ( list2)。基本的に、両方のリストの要素を比較する関数があり、 の要素が にある場合、list1list2コピーのその要素はlist2'A' に変更され、コピーの他のすべての要素は 'B' に変更されます。 . に要素が 1 つしかない場合に機能させることができますlist1。しかし、何らかの理由でリストが長くなると、すべての要素がlist2順番に B に....

def newList(list1,list2):         
    newList= list2[:]  
    for i in range(len(list2)):  
        for element in list1:  
            if element==newList[i]:  
                newList[i]='A'  
            else:
                newList[i]='B'  
    return newList
4

3 に答える 3

1

これを試して:

newlist = ['A' if x in list1 else 'B' for x in list2]

次の例で動作しますが、正しく理解できたと思いますか?の値がにB存在する場合はA挿入し、'A'そうでない場合'B'は新しいリストに挿入しますか?

>>> a = [1,2,3,4,5]
>>> b = [1,3,4,6]
>>> ['A' if x in a else 'B' for x in b]
['A', 'A', 'A', 'B']
于 2012-11-27T05:53:17.780 に答える
0

代わりに

newList: list2[:]

あなたが持っている必要があります

newList = list2[:]

個人的には、次の構文を好みます。これは、より明確であることがわかります。

import copy
newList = copy.copy(list2) # or copy.deepcopy

ここでの問題の一部は、newList関数とローカル変数の両方に同じ名前を使用していることでもあると思います。それはあまり良くありません。

def newList(changing_list, static_list):
    temporary_list = static_list[:]
    for index, content in enumerate(temporary_list):
        if content in changing_list:
            temporary_list[index] = 'A'
        else:
            temporary_list[index] = 'B'
    return temporary_list

ここで、に複数のエントリがあり、それらが一致する場合の対処方法を明確にしていないことに注意してlist1くださいlist2。私のコードは、一致するすべてのものをマークします'A'。例:

>>> a = [1, 2, 3]
>>> b = [3,4,7,2,6,8,9,1]
>>> newList(a,b)
['A', 'B', 'B', 'A', 'B', 'B', 'B', 'A']
于 2012-11-27T05:52:35.923 に答える
0

これはあなたがやりたいことだと思います。以下の代わりにnewLis=list2 [:]を置くことができますが、これらの場合はlistを使用することをお勧めします。

def newList1(list1,list2):         
     newLis = list(list2)
     for i in range(len(list2)):  
          if newLis[i] in list1:  
               newLis[i]='A'  
          else: newLis[i]='B'  
     return newLis

合格時の答え

newList1(range(5),range(10))

は:

['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B']
于 2012-11-27T05:53:42.333 に答える