Mulitplying按其索引排列在列表中

时间:2017-12-27 13:30:45

标签: python python-3.x

如何在列表中乘以整数,以便第一个int乘以最后一个,依此类推。我想出了那个

l = [1,2,3,4,5]
l1 = l[::-1]
l2 = [x*y for x,y in zip(l,l1)]

但这并不像我想要的那样,因为总有一个int会匹配另一个列表中的int。我希望将它放在一个列表中,这样就会有一个特定的int(中间一个),它不会找到另一个要乘以的int,对于那种情况,我需要将它替换为这个int的平方根。结果将是(上面的l)

[5,8,square root of 3].  

所以基本上它需要通过我认为的索引,但我不知道如何实现它。

5 个答案:

答案 0 :(得分:2)

你可以将列表的相应元素相乘,取中间元素的平方根。然后将结果转换为设置以删除重复项。但是,这不会保留元素的顺序

import math
list(set([math.sqrt(x) if x==y else x*y for x,y in zip(l,l[::-1])]))

输出:

[8, 1.7320508075688772, 5]

如果您希望保留元素的顺序并删除重复项,可以使用:

from collections import OrderedDict
import math
list(OrderedDict.fromkeys([math.sqrt(x) if x==y else x*y for x,y in zip(l,l[::-1])]))

输出:

[5, 8, 1.7320508075688772]

答案 1 :(得分:1)

  

我希望将它放在一个列表中,这样就会有一个int(中间的一个)不会找到另一个要乘以的int,对于那种情况我需要将它替换为这个int的平方根。

由于您有特殊情况,因此需要if声明。使用for循环而不是列表理解来编写可能更容易:

l2 = []
for x, y in zip(l, l1):
    if x == y:
        l2.append(sqrt(x))
    else:
        l2.append(x * y)

答案 2 :(得分:1)

您现在可以使用以下代码,然后您可以根据需要进行修改:

import math
l = [1, 2, 3, 4, 5]
middle = int(len(l)/2)
final = []
total = len(l)

for value in range(total):
    if value < middle:
        final.append(l[value]*l[total-value-1]) 
    elif total%2 !=0:
        final.append(math.sqrt(l[value]))
        break
    else:
        break
print(final)

输出:

[5, 8, 1.7320508075688772]

答案 3 :(得分:0)

#!/usr/bin/env python

from math import sqrt

l = [1,2,3,4,5]
l2 = []
l_size=len(l)
mid_index=l_size/2

# lets multiply
for i in range(0, mid_index):
    l2.append(l[i]*l[-(i+1)])
# if the length is odd, middle element needs to be taken care of
if l_size%2:
     l2.append(sqrt(l[mid_index]))
print l2

答案 4 :(得分:0)

这会产生您想要的结果:

from math import sqrt

end = len(l)//2
res = [x * y for x, y in zip(l[:end], reversed(l))] + [sqrt(l[end])]
print(res)

输出:

[5, 8, 1.7320508075688772]