在列表中的数字上尝试执行函数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
答案 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]]