【问题标题】:Appending elements to a list based on condition根据条件将元素附加到列表
【发布时间】:2018-02-08 00:30:25
【问题描述】:

我试图将几个元素附加到列表list_accepted_outsidenestant。当我尝试打印列表list_accepted_outsidenestant 时,我得到:list_accepted_outsidenestant- [([971, 977, 728, 740], set([728, 977, 971, 740]))]。该列表显示了一个列表并设置了相同的元素。谁能指出我正在做的错误?因此,我收到一个错误: set_accepted_outsidenest_antlist = set(list_accepted_outsidenestant TypeError: unhashable type: 'list'

我展示了仅与当前问题相关的部分代码。

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

【问题讨论】:

  • 这段代码很难阅读。请尝试追查问题是从哪里引入的,并且行为与您的预期不同。
  • 换句话说,请创建一个minimal reproducible example 来证明您的问题。
  • @ChristianDean 我想要的是list_accepted_outsidenestant = [971, 977, 728, 740]
  • @philippd 。我只是想将元素扩展到列表list_accepted_outsidenestant。我期望的是; list_accepted_outsidenestant = [971, 977, 728, 740]。我得到的是list_accepted_outsidenestant- [([971, 977, 728, 740], set([728, 977, 971, 740]))]
  • 我不会检查您的代码并为您解决问题。在某些时候,您将一组元组附加到列表中。您只需找出位置,然后将集合转换为列表并使用 list.extend 方法或 list.append 方法。

标签: python list loops if-statement set


【解决方案1】:

问题是您将列表附加到列表中。 您可以遍历要添加的列表:

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)

或添加列表:

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

或者正如 bruno 指出的(甚至更好),扩展列表。

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

【讨论】:

  • 或使用list.extend(other_list)
  • 不知道这个。谢谢
  • @JanZeiseweis 我按照extent 的建议修改了代码。但问题依然存在
  • 你的问题可能是ori 列表。你在哪里创建这个。您是否尝试在将 ori 添加到现有列表之前打印它?
  • Python 也有+= 操作符,如果不是像.extend() 那样高效,也差不多。 (这是list.__iadd__() 的快捷方式。
【解决方案2】:

append 函数将整个数组添加到其他数组中
extend 函数将数组添加到前一个数组中

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]

希望这段代码对你有帮助

【讨论】:

  • 我明白你所说的。我尝试使用extend 而不是追加,但问题仍然存在
  • 请用更简单的方式解释正在尝试的内容,因为您的代码很难阅读。
猜你喜欢
  • 2022-10-14
  • 2021-08-10
  • 2016-11-19
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2021-11-23
  • 2019-08-05
相关资源
最近更新 更多