1

次の2つの配列があります.invalid_id_arrの要素がvalid_id_arrに存在するかどうかを確認しようとしていますが、存在しない場合はdiff配列を形成し['id123', 'id124', 'id125', 'id126', 'id789', 'id666']ます["id789","id666"]ここで何が間違っているのかという出力

tag_file= {}
tag_file['invalid_id_arr']=["id123-3431","id124-4341","id125-4341","id126-1w","id789-123","id666"] 
tag_file['valid_id_arr']=["id123-12345","id124-1122","id125-13232","id126-12332","id1new","idagain"] 
diff = [ele.split('-')[0] for ele in tag_file['invalid_id_arr'] if str(ele.split('-')[0]) not in tag_file['valid_id_arr']]

現在の出力:

 ['id123', 'id124', 'id125', 'id126', 'id789', 'id666']

予想される出力:

 ["id789","id666"]
4

3 に答える 3

4

セットを使用する方が効率的ですが、主な問題は、valid_id_arr の要素の後半を削除していないことです。

invalid_id_arr=["id123-3431","id124-4341","id125-4341","id126-1w","id789-123","id666"] 
valid_id_arr=["id123-12345","id124-1122","id125-13232","id126-12332","id1new","idagain"]
valid_id_set = set(ele.split('-')[0] for ele in valid_id_arr)
diff = [ele for ele in invalid_id_arr if ele.split('-')[0] not in valid_id_set]
print diff

出力:

['id789-123', 'id666']

http://ideone.com/Q9JBw

于 2012-06-13T08:33:18.277 に答える
3

試してくださいsets

invalid_id_arr = ["id123-3431","id124-4341","id125-4341","id126-1w","id789-123","id666"] 
valid_id_arr = ["id123-12345","id124-1122","id125-13232","id126-12332","id1new","idagain"] 

set_invalid = set(x.split('-')[0] for x in invalid_id_arr)
print set_invalid.difference(x.split('-')[0] for x in valid_id_arr)
于 2012-06-13T08:35:58.977 に答える
0
    >>> a = ["id123-3431","id124-4341","id125-4341","id126-1w","id789-123","id666"]
    >>> b = ["id123-12345","id124-1122","id125-13232","id126-12332","id1new","idagain"]
    >>> c = (s.split('-')[0] for s in b)
    >>> [ele.split('-')[0] for ele in a if str(ele.split('-')[0]) not in c]

        ['id789', 'id666']
    >>>  
于 2012-06-13T08:39:58.657 に答える