【问题标题】:How to iterate over a list of lists of integers?如何遍历整数列表列表?
【发布时间】:2021-10-08 03:21:05
【问题描述】:

据我所知,没有人问过这个问题。

如果我有两个这样的列表:

a_list = [[1,2], [5,6], [7,8]]
b_list = [3, 4]

如何在检查b_list 的值是否符合a_list 中数字的升序时对其进行迭代?在这种情况下,b_list 介于 [1, 2][5, 6] 之间,应该附加在那个位置。这在 python 中是如何实现的?

当我使用 for 循环时,它告诉我:

"TypeError: 'int' object is not subscriptable"

我使用了这个代码:

for sub_lst in a_lst:
    for lst in sub_lst:

【问题讨论】:

  • subscriptable 指的是your_variable[the_brackets_are_subscripts] 语法。你在这些循环中做什么?

标签: python list loops


【解决方案1】:

您可以简单地将b 附加到a 然后对所有元素进行排序:

>>> a_list = [[1, 2], [5, 6], [7, 8]]
>>> b_list = [3, 4]
>>> sorted(a_list + [b_list])
[[1, 2], [3, 4], [5, 6], [7, 8]]

【讨论】:

  • 谢谢!但我想确保它符合保证递增顺序的原则。问题与其说是附加,不如说是关于检查并确保 b_list 应该去的正确位置。希望这是有道理的。
【解决方案2】:

如果你想坚持你所拥有的(使用 for 循环)做

for index, sub_list in enumerate(a_list):
    if sub_list[0] < b_list[0]:
        continue
    elif sub_list[0] == b_list[0] and sub_list[1] < b_list[1]:
        continue
    else:
        a_list.insert(index, b_list)
        break

这将遍历列表,直到您到达正确的位置(考虑到第二个位置,以防第一个位置相同,即 [3, 3] 和 b_list = [3,5])并将 b_list 附加到停止的索引

【讨论】:

  • 谢谢!我对枚举的整个想法很陌生。所以本质上它所做的是每次迭代它都会将计数应用于变量索引?因为一个正常的for循环是:for i in a_list。但是这个是针对 i, a_list in enumerate(a_list) 的。 'i' 在每次迭代期间充当索引位置的计数,有点像我只是在循环之前放置一个 count var 并在循环内每次迭代它?
  • @Tim_Jarvis99 是的,你是对的!
  • 您好,只是想联系一下,您是否有任何项目可以与您合作。我想积累一些关于 SD 的经验。而且您的网站很棒。
  • 不幸的是我很忙,除非你想做我的大学作业,否则我想我没有时间?
  • @Tim_Jarvis99 如果您对答案感到满意,请检查答案(在投票按钮下)
【解决方案3】:

您可以使用 bisect_left 通过二分搜索查找插入索引(我假设您的数据中没有范围重叠)

a_list = [[1,2], [5,6], [7,8]]
b_list = [3, 4]

from bisect import bisect_left

i = bisect_left(a_list,b_list)
a_list.insert(i,b_list)

print(a_list)
[[1, 2], [3, 4], [5, 6], [7, 8]]

您也可以通过顺序搜索大于 b_list 的第一项的索引来做到这一点。

a_list = [[1,2], [5,6], [7,8]]
b_list = [3, 4]

i = next((i for i,a in enumerate(a_list) if b_list<a),len(a_list))
a_list.insert(i,b_list)

print(a_list)
[[1, 2], [3, 4], [5, 6], [7, 8]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2016-08-08
    • 2019-07-22
    • 2013-01-26
    • 1970-01-01
    • 2010-12-18
    • 2019-12-30
    相关资源
    最近更新 更多