简体   繁体   English

根据条件将元素追加到列表

[英]Appending elements to a list based on condition

I was trying to append few elements to a list list_accepted_outsidenestant . 我试图将几个元素添加到列表list_accepted_outsidenestant When i try to print the list list_accepted_outsidenestant , i get: list_accepted_outsidenestant- [([971, 977, 728, 740], set([728, 977, 971, 740]))] . 当我尝试打印列表list_accepted_outsidenestant ,我得到: list_accepted_outsidenestant- [([971, 977, 728, 740], set([728, 977, 971, 740]))] The list is showing a list and set with same elements. 该列表显示一个列表,并设置了相同的元素。 Can anyone pointout the mistake i am doing? 谁能指出我正在做的错误? Because of this, i am getting an error: set_accepted_outsidenest_antlist = set(list_accepted_outsidenestant TypeError: unhashable type: 'list' 因此,我收到一个错误: set_accepted_outsidenest_antlist = set(list_accepted_outsidenestant TypeError: unhashable type: 'list'

I have shown part of code only relevant to the current question. 我已经展示了仅与当前问题相关的部分代码。

def leo(tag_data):
    available_ants_outside = []
    ori = []
    for id, (x, y) in tag_data:
        available_ants_outside.append(id)
        if for_coordinates_outside_nest((x, y)) is True:
            ori.append(id)
    return ori


def virgo(tag_data):
    available_ants_inside = []
    list_insidenest_ant_id = []
    set_inside_nest_ant_id = set()
    for id, (x, y) in tag_data:
        available_ants_inside.append(id)
        if for_coordinates_inside_nest((x, y)) is True:
            list_insidenest_ant_id.append(id)
            set_inside_nest_ant_id = set(list_insidenest_ant_id)
            return list_insidenest_ant_id,set_inside_nest_ant_id

 def bambino(ori,list_insidenest_ant_id):
    list_accepted_outsidenestant = []                       
    set_accepted_outsidenest_antlist = set()
    set_accepted_insidenest_antlist = set()
    if len(list_accepted_outsidenestant) < num_accepted:
        if (len(ori) > 0) or (len(list_insidenest_ant_id) >0):
            list_accepted_outsidenestant.extend(ori[0:min(len(ori),             
            num_accepted-len(list_accepted_outsidenestant))])
            set_accepted_outsidenest_antlist = set(list_accepted_outsidenestant)  
            print "list_accepted_outsidenestant-" + str(list_accepted_outsidenestant)
            set_accepted_insidenest_antlist  = set(list_insidenest_ant_id)
    return set_accepted_outsidenest_antlist,set_list_outsideant_id,set_accepted_insidenest_antlist

The problem is that you're appending a list to a list. 问题是您要将列表追加到列表中。 You can either iterate over the list you want to add: 您可以遍历要添加的列表:

items_to_add = ori[0:min(len(ori),             
                   num_accepted-len(list_accepted_outsidenestant))]
for item in items_to_add:
    list_accepted_outsidenestant.append(item)

Or add the lists: 或添加列表:

list_accepted_outsidenestant = list_accepted_outsidenestant + ori[0:min(len(ori), num_accepted-len(list_accepted_outsidenestant))]

Or as bruno pointed out (even better), extend the list. 或如bruno所指出的(甚至更好),扩展列表。

list_accepted_outsidenestant.extend(ori[0:min(len(ori), num_accepted-len(list_accepted_outsidenestant))])

append function add whole into other array 追加功能将整体添加到其他数组
extend function extend add array into previous array 扩展功能扩展添加数组到前一个数组

In [1]: a = [1,2,3,4]

In [2]: b = [10,9,8,7,6]

In [3]: a.append(b)

In [4]: a
Out[4]: [1, 2, 3, 4, [10, 9, 8, 7, 6]]

In [5]: c = [1,2,3,4]

In [6]: c.extend(b)

In [7]: c
Out[7]: [1, 2, 3, 4, 10, 9, 8, 7, 6]

Hope this code help you 希望这段代码对您有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM