2017-03-10 55 views
3

编辑2:我已经删除了其余的代码,所以我不会破坏解决方案。感谢您的帮助。python:如何将列表中的每个值与另一个列表中的所有值相乘

编辑:我包括我的整个代码。我不想包含它,因为我不想让任何人自己试图解决这个问题。但我需要帮助,所以在这里。

我手动通过执行以下操作来完成此操作,但我希望这可以在更大的范围内工作,并且我拒绝多次手动复制和粘贴。这不是编写代码的要点。

x = [] 
y = [] 

for i in range(len(x)-1): 
products.append(x[0] * y[i]) 
products.append(x[1] * y[i]) 
products.append(x[2] * y[i]) 
products.append(x[3] * y[i]) 
products.append(x[4] * y[i]) 
products.append(x[5] * y[i]) 
products.append(x[6] * y[i]) 
products.append(x[7] * y[i]) 
products.append(x[8] * y[i]) 
products.append(x[9] * y[i]) 
products.append(x[10] * y[i]) 
products.append(x[11] * y[i]) 
products.append(x[12] * y[i]) 
products.append(x[13] * y[i]) 
products.append(x[14] * y[i]) 
products.append(x[15] * y[i]) 
products.append(x[16] * y[i]) 
products.append(x[17] * y[i]) 
products.append(x[18] * y[i]) 
products.append(x[19] * y[i]) 
products.append(x[20] * y[i]) 
products.append(x[21] * y[i]) 
products.append(x[22] * y[i]) 
products.append(x[23] * y[i]) 
products.append(x[24] * y[i]) 
products.append(x[25] * y[i]) 
products.append(x[26] * y[i]) 
products.append(x[27] * y[i]) 
products.append(x[28] * y[i]) 
products.append(x[29] * y[i]) 
products.append(x[30] * y[i]) 
products.append(x[31] * y[i]) 
products.append(x[32] * y[i]) 
products.append(x[33] * y[i]) 
products.append(x[34] * y[i]) 
products.append(x[35] * y[i]) 
products.append(x[36] * y[i]) 
products.append(x[37] * y[i]) 
products.append(x[38] * y[i]) 
products.append(x[39] * y[i]) 
products.append(x[40] * y[i]) 
products.append(x[41] * y[i]) 
products.append(x[42] * y[i]) 
products.append(x[43] * y[i]) 
products.append(x[44] * y[i]) 
products.append(x[45] * y[i]) 
products.append(x[46] * y[i]) 
products.append(x[47] * y[i]) 
products.append(x[48] * y[i]) 
products.append(x[49] * y[i]) 
products.append(x[50] * y[i]) 
products.append(x[51] * y[i]) 
products.append(x[52] * y[i]) 
products.append(x[53] * y[i]) 
products.append(x[54] * y[i]) 
products.append(x[55] * y[i]) 
products.append(x[56] * y[i]) 
products.append(x[57] * y[i]) 
products.append(x[58] * y[i]) 
products.append(x[59] * y[i]) 
products.append(x[60] * y[i]) 
products.append(x[61] * y[i]) 
products.append(x[62] * y[i]) 
products.append(x[63] * y[i]) 
products.append(x[64] * y[i]) 
products.append(x[65] * y[i]) 
products.append(x[66] * y[i]) 
products.append(x[67] * y[i]) 
products.append(x[68] * y[i]) 
products.append(x[69] * y[i]) 
products.append(x[70] * y[i]) 
products.append(x[71] * y[i]) 
products.append(x[72] * y[i]) 
products.append(x[73] * y[i]) 
products.append(x[74] * y[i]) 
products.append(x[75] * y[i]) 
products.append(x[76] * y[i]) 
products.append(x[77] * y[i]) 
products.append(x[78] * y[i]) 
products.append(x[79] * y[i]) 
products.append(x[80] * y[i]) 
products.append(x[81] * y[i]) 
products.append(x[82] * y[i]) 
products.append(x[83] * y[i]) 
products.append(x[84] * y[i]) 
products.append(x[85] * y[i]) 
products.append(x[86] * y[i]) 
products.append(x[87] * y[i]) 
products.append(x[88] * y[i]) 
products.append(x[89] * y[i]) 

我知道如果你重复代码,你做错了。我无法弄清楚如何让这个工作。

我试过x [i] * y [i],但它只是取每个值的第一个值并将它们相乘。

我试着把另一个for循环里面,但是也没有工作(相同的结果)。

我尝试了一个while循环,j = 0,并且每次将j增加1,但这也不起作用(相同的结果)。

请帮我理解我该如何做到这一点。我知道这是可能的。我一直在python练习一周,所以请给我一个休息时间,我知道这是一个愚蠢的问题。

+0

请告诉我们您的输入和预期的输出。 – McGrady

+0

好的我将用整个代码编辑 – vampiire

+0

@McGrady我用整个代码编辑过。我不想破坏解决方案,但在这里。我知道这适用于测试用例,我想扩展它以适应问题陈述,但是我无法多次复制和粘贴它。 – vampiire

回答

1

有没有必要做

for i in range(10, 100): 
    x.append(i) 

您可以从一个range对象这样做一个清单:

x = list(range(10, 100)) 

但是,没有必要制作那些xy列表。您可以通过直接在范围内迭代来创建产品列表。例如:

products = [] 
for x in range(10, 100): 
    for y in range(10, 100): 
     products.append(x * y) 

为了使刚刚包含回文列表:

def is_palindrome(n): 
    s = str(n) 
    return s == s[::-1] 

products = [] 
for x in range(10, 100): 
    for y in range(10, 100): 
     n = x * y 
     if is_palindrome(n): 
      products.append(n) 

那么你可以做max(products)发现是两个二位数字的产品最高回文。

这里有一个更紧凑的方式,使用生成的表达,所以它并不需要建立一个列表:

r = range(10, 100) 
print(max(filter(is_palindrome, (x * y for x in r for y in r)))) 
+0

圣切斯特。你只是压缩了我的整个代码,使我连续3天开始和结束两行。你是一个精灵 – vampiire

+0

......它立即运行。我不知道你是谁,但对我而言,你刚刚做的是传奇。我唯一的问题是,为什么is_palindrome在'generator expression'中不需要参数'n'? – vampiire

+0

@vampiire呃,我已经使用Python超过10年了,并且使用各种语言编程了数十年,所以我学到了一些技巧。 :)但是,一旦你了解了[generator表达式](https://docs.python.org/3/tutorial/classes.html#generator-expressions)和[过滤](https://docs.python.org/3/library/functions.html#filter)函数。 –

2

您需要使用嵌套循环

x = [] 
y = [] 
products = [] 
palindromes = [] 

for i in range(10, 100): 
    x.append(i) 
# print(x) 

for i in range(10, 100): 
    y.append(i) 
# print(y) 

for i in range(len(y)): 
    for j in range(len(x)): 
     products.append(x[j] * y[i]) 


for i in range((len(products)-1)): 
    a = str(products[i]) 
    b = tuple(a) 
    c = b[::-1] 
    if b == c: 
     print('palindrome found!', a) 
     print('b value:', b) 
     print('c value:', c) 
     palindromes.append(a) 

solutions = list(map(int, palindromes)) 
solutions.sort() 
print(solutions) 

这就是所谓的嵌套循环。变量i迭代的Y减1和变量j的长度迭代为x的长度减去1

+0

我试过这个,并没有给我同样的结果。让我再尝试也许(更可能)我搞砸了。 – vampiire

+0

不,这不起作用。不会产生与我之前手动复制/粘贴方式相同的结果。任何建议? – vampiire

+0

@vampiire它应该工作,因为我做了同样的事情,我看到相同的输出。所以我已将解决方案与您的实际代码集成在一起。 –

0

您的循环是相同的:

products=[i*j for i in x[:-1] for j in y] 
-1

您可以使用Kaushal库马尔·辛格的解决方案,或这里有两个其他解决方案。但是,在编程中没有通用的解决方案,很多解决方案可以共存。

代码1:

products = [i * j for i, j in zip(x, y)] 

代码2:

from operator import mul 

products = list(map(mul, x, y)) 
+0

这只是将2个列表的相应元素放在一起,即'x [0] * y [0],x [1] * y [1]'等。这不是OP想要做的。 –

+0

没错。它归结为嵌套for循环。我尝试这个时遇到的问题是使用l​​en(x)-1而不是len(x)作为范围。 – vampiire

相关问题