【问题标题】:How to create a list of strings in python from two "array.flatten()"-ed lists如何从两个“array.flatten()”-ed 列表在 python 中创建字符串列表
【发布时间】:2016-07-14 16:36:43
【问题描述】:

我希望在 python 中创建以下列表:

list = ["pix420_615", "pix421_615", ... , "pix425_620"]

注意其中列表是字符串列表,而不是值。

来自以下两个列表:

x= [420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425,
 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425]

y= [615, 615, 615, 615, 615, 615, 616, 616, 616, 616, 616, 616, 617, 617, 617, 617, 617, 617,
 618, 618, 618, 618, 618, 618, 619, 619, 619, 619, 619, 619, 620, 620, 620, 620, 620, 620]

我想知道我将如何做到这一点,并保持相应数组值的一致性......?

【问题讨论】:

  • 你的意思是list = ['pix420_615', 'pix421_615', ...] 每个元素都是一个字符串吗?如果不是,pix420_615等的值是多少?
  • @smarx Yeh,其中每个元素只是通过将 pix 按顺序添加到 x 和 y 数组而创建的字符串...
  • 很简单:map(lambda t: 'pix%s_%s' % t, zip(x, y))(或者,如果你不喜欢地图:['pix%s_%s' % t for t in zip(x, y)]

标签: python arrays string list


【解决方案1】:

这应该可以解决问题。 zip 是做这种事情的最好方法:

x = [420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425, 420, 421, 422, 423, 424, 425]

y = [615, 615, 615, 615, 615, 615, 616, 616, 616, 616, 616, 616, 617, 617, 617, 617, 617, 617, 618, 618, 618, 618, 618, 618, 619, 619, 619, 619, 619, 619, 620, 620, 620, 620, 620, 620]

z = ['pix{}_{}'.format(a, b) for a, b in zip(x, y)]

print(z)

# Output:
# ['pix420_615', 'pix421_615', 'pix422_615', 'pix423_615', 'pix424_615', 'pix425_615', 'pix420_616', 'pix421_616', 'pix422_616', 'pix423_616', 'pix424_616', 'pix425_616', 'pix420_617', 'pix421_617', 'pix422_617', 'pix423_617', 'pix424_617', 'pix425_617', 'pix420_618', 'pix421_618', 'pix422_618', 'pix423_618', 'pix424_618', 'pix425_618', 'pix420_619', 'pix421_619', 'pix422_619', 'pix423_619', 'pix424_619', 'pix425_619', 'pix420_620', 'pix421_620', 'pix422_620', 'pix423_620', 'pix424_620', 'pix425_620']

【讨论】:

    【解决方案2】:

    从您的列表中,

    map(lambda t: 'pix%s_%s' % t, zip(x, y))
    

    ['pix%s_%s' % t for t in zip(x, y)]
    

    但是,我注意到第一个列表基本上是[420, ..., 425],第二个是[615, ...],这导致zip(x, y) 代表range(420, 426)range(620, 626) 的乘积。

    您可以通过以下方式简化所有这些:

    from itertools import product
    
    ['pix%s_%s' % (y, x) for x, y in product(range(615, 621), range(420, 426))]
    

    【讨论】:

    • 一个 tiny 挑剔。在列表理解上使用map 带来的小的优化好处丢失了when using lambda。不过,我确实喜欢itertools.product 解决方案。
    【解决方案3】:

    使用map函数

    map(lambda a, b: 'pix{0}_{1}'.format(a,b), x, y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      相关资源
      最近更新 更多