整数列表,将每个元素提升为幂

时间:2017-03-18 22:27:51

标签: python list python-3.x

在列表中的数字上尝试执行函数y = x ** E%N(72,36,72,25,72,28,.....)请注意,空元素很重要。

mylist = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]]
E = 3233
N = 17

for i in mylist:
    if i != ' ':
        i[0] = i[0]**E%N
        i[1] = i[1]**E%N

当我尝试这个时,我收到以下错误:

TypeError:必须是str,而不是int

2 个答案:

答案 0 :(得分:1)

你应该尝试遵循常见的Python习语。

1)不要将数据命名为list,而是覆盖Python内置的

2)如果你正在做for i in range(len(l)):,那你做错了。循环遍历iterable本身。

3)如果可能,尝试在列表中保留类似的类型。

这是一个未经测试的例子,我认为你正在尝试做的事情:

data = [[72, 36], [], [72, 25], [72, 28], [72, 38], [], [72, 28]]  # replaced empty strings with empty lists, maintain type similarity 
E = 3233
N = 17

for pair in data:  # loop over list itself, not range(len(list))
    if pair:  # pair is Truthy if the element is NOT an empty list
        pair[0] = pair[0]**(E%N) 
        pair[1] = pair[1]**(E%N)

编辑:如果您必须保留原始数据列表中的空格:

data = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]]
E = 3233
N = 17

for pair in data:  # loop over list itself, not range(len(list))
    if pair != ' ':
        pair[0] = pair[0]**(E%N) 
        pair[1] = pair[1]**(E%N)

答案 1 :(得分:0)

所以,我想出了这个代码,假设你想要执行就地计算:

data = [[72, 36], ' ', [72, 25], [72, 28], [72, 38], ' ', [72, 28]]
E = 3233
N = 17

for sublist in data:
    if not isinstance(sublist, list):
        continue
    for idx, subitem in enumerate(sublist):
        item[idx] = pow(subitem, E, N)

print data

输出:

[[4, 2], ' ', [4, 8], [4, 11], [4, 4], ' ', [4, 11]]