Python将列表中的每个整数附加到另一个列表中的每个整数

时间:2019-09-25 00:59:25

标签: python

Noob在这里,好吧,我想将从“ range(3,20)”生成的每个整数附加到另一个类似的范围“ range(22,40)

from itertools import chain

L1 = 3
H1 = 20
L2 = 22
H2 = 40

new_list = [x for x in chain(range(L1,H1))]
new_list2 = [xx for xx in chain(range(L2,H2))]
print (new_list + new_list2)

结果应为:

322
323
324
325...
422
423
424
425...

上述代码的当前结果:

[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]

2 个答案:

答案 0 :(得分:2)

这应该有效:

L1, H1 = 3, 20
L2, H2 = 22, 40

new_list = [int(str(a) + str(b)) for a in range(L1, H1) for b in range(L2, H2)]
print(new_list)

# [322, 323, ..., 339, 422, 423, ..., 439, 522, ..., 939, 1022, 1023, ..., 1939]

对于您这种hacky用例来说,这是一种hacky解决方法:对于您两个范围中的每对数字ab,我们

  1. ab转换为字符串
  2. 串联它们(因此a=3b=22产生'322'
  3. 将结果转换回整数

答案 1 :(得分:2)

您正在谈论两个列表的乘积,因此itertools解决方案如下:

[int(str(a) + str(b)) for a,b in itertools.product(range(L1, H1), range(L2, H2))]

请注意,您的chain是多余的,可以直接删除。另外,如果范围很大,导致内存成为问题,则可以使用生成器表达式

(int(str(a) + str(b)) for a,b in itertools.product(range(L1, H1), range(L2, H2)))

由于在许多方面,itertools的重点是允许内存有效的迭代。