【问题标题】:Effeciently extend n number of lists together一起有效地扩展 n 个列表
【发布时间】:2020-03-11 06:08:10
【问题描述】:

假设你有无数个 python 列表。

如何在不手动写出扩展函数的情况下有效地将所有这些扩展在一起?

例如,

l1 = [1, 2, 3, ..., n]
l2 = [1, 2, 3, ..., n]
.
.
.
ln = [1, 2, 3, ..., n]

# Not this
l1.extend(l2)
l1.extend(l3)
.
.
.
l1.extend(ln)

谢谢!

【问题讨论】:

  • 你需要l1+l2+l3+..ln
  • 是的,但是假设每个列表都已单独定义,您如何获取每个列表?
  • 您不会明确定义它们。您可以改为将所有列表放在另一个列表中。
  • @Neel 你在找什么不清楚
  • 几乎有 100 个单独定义的列表,即 l1、l2、l3,它们不在一个列表中。希望这是有道理的。

标签: python list extend


【解决方案1】:

itertools.chain

list(chain(l1, l2, ..., ln)
#[1,2,3, ..., ln[n]]

【讨论】:

  • 谢谢,这可以工作。在不手动输入的情况下如何链接每个列表项?
  • 尝试搜索那个问题,或者问一个新的问题,我猜这更像是一个不同的问题
【解决方案2】:

你可以将它们加在一起[1,2,3] + [3,4,5],这是另一种方式

如果你有一堆像 l1,l2,l3,l4,l5 这样的变量,你可以这样做:

for x in range (1,5): 
   new_list = new_list + eval('l' + str(x)) 

这会将未分组到列表列表中的列表添加在一起。

这是一个处理不一致格式而没有错误的方法:

l1=[1,3]
l2=[4,5]
l3=[5,6]
n1=[2,3]
n5=[4,7]


new_list=[]
letters = ['l','n']
for items in letters:
    for x in range(0,6):
       try:
          new_list = new_list + eval(items + str(x))
       except: 
           continue

【讨论】:

  • 是的,但是假设每个列表都已单独定义,您如何获取每个列表?
  • 更新了有关如何执行此操作的信息。只要有一个好的命名约定,你就可以使用 eval 和 for 循环
  • 谢谢,这似乎很接近。命名约定虽然不一致...
  • 你有什么不同?你可以使用 try: except: 对于那些你有 l1 - l10,然后是 n1-20 的奇怪情况,所以当它没有找到 l11 时,它仍然有效。这有意义吗?
  • 我更新了如何处理不一致的数据,也许这会有所帮助?
【解决方案3】:

您需要一些东西来生成无限系列的列表,例如:

def feeder(n):
    while True:
        yield[x for x in range(n)]

然后是一个将一个永远链接到下一个的函数:

def extender(n):
    a = feeder(n)
    ln = []
    while True:
        ln += next(a)

然后,>>> extender(100) 会很快填满内存。 [根据问题编辑更改列表]

【讨论】:

  • 谢谢。你能澄清一下扩展器的作用吗?原因是因为我没有看到它返回某种结果?
  • 正如所写,没有返回任何内容; a = feeder(n) 行创建了一个生成器,它可以无限期地生成长度为 n 的列表。如果您想要一个包含 100 个列表的列表,请将 while True: 替换为 for x in range(100),然后将函数中的最后一行设为 return ln
【解决方案4】:
l1 = [1,2,3,4,5]
l2 = [5,6,7,8,9]
l3  = [10,11,12,13]
y = [l2,l3]

[l1.extend(x) for x in y] 
print(l1)

Out[33]:
[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13]

更新

 y = ['l{}'.format(y) for y in range(0,100)] # to get all 100 list, l1,l2,l3...l100
 [l1.extend(eval(x)) for x in y]

【讨论】:

  • 谢谢,我有近 100 个单独定义的列表。我不认为单独将它们单独放在列表 y 中是有效的。
  • 谢谢。与 oppressionslayer 解决方案类似,它会影响变量名称的变化。关闭,但还没有快乐。
猜你喜欢
  • 1970-01-01
  • 2018-08-20
  • 2015-12-18
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2015-11-08
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多