【问题标题】:Multiplying every second number in a list将列表中的每一秒数相乘
【发布时间】:2016-05-20 22:33:01
【问题描述】:

我需要能够将列表中的每一秒数乘以 2,所以说:

List = [1,2,3,4]

我希望它返回[1,4,3,8],但我尝试过的所有方式都可以,例如

credit_card = [int(x) for x in input().split()]

credit_card[::2] = [x*2 for x in credit_card[::2]]

print(credit_card)

如果我在返回[2,2,6,4]之前输入相同的列表

有没有办法完成我想要完成的事情?

【问题讨论】:

  • 给你一个方便的提示:避免使用内置名称命名变量,例如 listdictid 等。(这里你使用了大 L 所以不是这样的问题,而是变量should_look_like_thisClassesAreWrittenLikeThis。使代码更具可读性,并让您在路上省心

标签: python


【解决方案1】:

你快到了,你只需要从第二个(1-indexed)元素开始:

credit_card[1::2] = [x*2 for x in credit_card[1::2]]

也就是说,由于您似乎正在实现 Lunh checksum,因此您只需要这些数字的总和,而无需更新原始数据,就像在 this example 中所做的那样。

【讨论】:

  • 对 OP 的简单解释:一般语法是credit_card[start:stop:step][::2] 表示“以 2 步从开始到停止所有元素,[2::2] 表示“从第 3 个元素开始,以 2 步结束
【解决方案2】:
lst = [1,2,3,4]

new_lst = [2*n if i%2 else n for i,n in enumerate(lst)]     # => [1, 4, 3, 8]

【讨论】:

  • 我认为如果你使用1*x = x而不是0 = False :-)
  • 我不明白你的评论与我的回答有什么关系?
  • 啊......这会起作用,并且由于没有分支可能会(非常轻微地)更快。但我认为可读性的降低胜过任何代码长度或速度的改进:-/
  • 只是评论两个值得记住的属性可以“解决”这个问题:-)
【解决方案3】:
credit_card = input().split()
for x in len(credit_card)
    if x % 2 != 0
        credit_card[x] = credit_card[x] * 2

print (credit_card)

【讨论】:

    【解决方案4】:
    for i,_ in enumerate(credit_card):
        if i%2:
            credit_card[i] *= 2
    

    或者如果你想变得花哨:

     credit_card=[credit_card[i]*(2**(i%2)) for i in range(len(credit_card))]
    

    【讨论】:

      【解决方案5】:

      使用枚举的另一种解决方案:

      [i* 2 if p % 2 else i for p, i in enumerate(l)]
      

      其中 il 的第 p-th 元素。

      【讨论】:

      • 好答案。只需将item 更改为i(现在,它不会工作):)
      • @spoor, @Nander Speerstra:% 运算符的目的是什么?
      • @Jon。您基本上通过检查除以 2 的余数是 0(偶数)还是非(奇数)来检查位置是偶数还是奇数。
      • @sopor:所以你可以说if p % 2 而不是if p % 2 == 0 的原因是因为Python 将0 值作为真值,1 作为假值......对吗?这意味着 0 通过了 if 并且任何其他值都失败了
      • @Jon,现在:如果索引是 odd,请使用 p*2 (else: p)。如果您说if p % 2 == 0,则必须反转 if/elsei if p % 2 == 0 else i*2。现在你说:如果索引是even,则打印pelse:使用p*2)。这取决于您喜欢在ifelse 中成为什么样的人...
      【解决方案6】:
      >>> l = [1,2,3,4]
      >>> 
      >>> list(map(lambda x: x*2 if l.index(x)%2 else x, l))
      [1, 4, 3, 8]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 2016-12-07
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        相关资源
        最近更新 更多