【问题标题】:List comprehension to loop over 2 lists of lists and change data列表理解循环遍历 2 个列表并更改数据
【发布时间】:2017-09-21 13:22:38
【问题描述】:

我有这个列表理解功能:

def mergesafirmacheta(list1,list2):
    desiredlist = [list2[0][:3] + [n2, list2[0][4]] if n1 == list2[0][1]
                   else [id, n1, dates, n2, 0] for id, n1, dates, n2, n3 in list1]
    return desiredlist

而我的 list1 和 list2 看起来像这样:

list1=[['user1', 186, 'Feb 2017, Mar 2017, Apr 2017', 550, 555], 
       ['user2', 282, 'Mai 2017', 3579, 3579], 
       ['user3', 281, 'Mai 2017', 10, 10]]

list2=[['user2', 282, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 100, 1000],
      ['user1', 186, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 0, 740]]

if n1 == list2[0][1]我想遍历所有列表,而不仅仅是 list2 中 index[1] 位置的第一个列表,因为现在我只能到达:['user2', 282, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 100, 1000] 比较我的 if 中的 282,但是在我的第二个列表中,我永远不会达到 186。我怎样才能遍历所有这些? (可能是在 list2 中会有更多的列表)。

稍后编辑:

期望的输出:

[['user1', 186, 'Feb 2017, Mar 2017, Apr 2017', 550, 740], 
['user2', 282, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 3579, 1000],
['user3', 281, 'Mai 2017', 10, 0]]

【问题讨论】:

  • 这是不同的,因为我询问了与该主题相比的另一个主题。
  • 我进行了编辑。
  • 必须是列表理解吗?这样做的目的是使代码清晰易读,而通过理解来实现你想要的东西会达到相反的效果..
  • 不需要列表理解。

标签: python python-3.x list


【解决方案1】:

在乞求时再添加一个循环并像这样更改变量:-

def mergesafirmacheta(list1,list2):
    desiredlist = [list_2[:3] + [n2, list_2[4]] if n1 == list_2[1]
               else [id, n1, dates, n2, 0] for list_2 in list2 for id, n1, dates, n2, n3 in list1]
    return desiredlist

我希望这就是你要找的。​​p>

【讨论】:

  • 几乎,检查我想要的输出,使用您的调整它将为每个用户输出两次:[['user1', 186, 'Feb 2017, Mar 2017, Apr 2017', 550, 0], ['user1', 186, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 550, 740], ['user2', 282, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 3579, 1000 ], ['user2', 282, 'Mai 2017', 3579, 0], ['user3', 281, 'Mai 2017', 10, 0], ['user3', 281, 'Mai 2017', 10, 0]]
  • 我更改了代码。但是您的输出似乎是根据“如果我们使用第二个列表的第一个列表迭代第一个列表”。顺便说一句,您真的应该更改代码,因为它变得不可读且难以定义......
  • 更改后我会得到:[['user1', 186, 'Feb 2017, Mar 2017, Apr 2017', 550, 0], ['user2', 282, 'Feb 2017 , 2017 年 3 月, 2017 年 4 月, Mai 2017', 3579, 1000], ['user3', 281, 'Mai 2017', 10, 0], ['user1', 186, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 550, 740], ['user2', 282, 'Mai 2017', 3579, 0], ['user3', 281, 'Mai 2017', 10, 0]] 作为输出,最后3个列表与我想要的输出相匹配,前 3 个是错误的。它在某处循环了两次。
【解决方案2】:

我猜这就是你要找的东西:

list1=[['user1', 186, 'Feb 2017, Mar 2017, Apr 2017', 550, 555], ['user2', 282, 'Mai 2017', 3579, 3579], ['user3', 281, 'Mai 2017', 10, 10]]
list2=[['user2', 282, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 100, 1000],['user1', 186, 'Feb 2017, Mar 2017, Apr 2017, Mai 2017', 0, 740]]

desiredlist = []
for id, n1, dates, n2, n3 in list1:
    counter = 0
    for list_2 in list2:
        if n1 == list_2[1]:
               desiredlist.append(list_2[:3] + [n2, list_2[4]])
        else:
               counter += 1
               if counter == len(list2):
                   desiredlist.append([id, n1, dates, n2, 0])

print(desiredlist)

只有在没有为 list1 中的 n1 找到 list2 的所有元素时,您才想进入 else 条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多