如何在列表中乘以整数,以便第一个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].
所以基本上它需要通过我认为的索引,但我不知道如何实现它。
答案 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]