反复调用列表理解中的方法

时间:2014-05-02 00:00:18

标签: python list-comprehension

让我们考虑一个名为'my_list`的列表,其内容如下:

['10', '100', '1,000', '10,000', 100,000']

我想验证my_list是一个字符串化整数列表,它是10的倍数,并按升序排序,所以这就是我做的事情

int_list = [int(each_int.replace(',', '')) for each_int in my_list]

boolean = all([int_list[idx] == int_list[idx-1]*10 for idx in xrange(1, len(int_list))])

我的问题是每次迭代都会调用len()吗?在这种情况下,更好的做法是什么?

  1. 将长度分配给变量,并在列表解析
  2. 中使用它而不是len()本身
  3. 没关系,len()只对所有迭代执行一次
  4. if 2.,是否适用于说,我正在迭代列表字典的值/键(或者只是字典)

    ex:d_list = [set(value) for value in my_dict.values()]

1 个答案:

答案 0 :(得分:1)

你可以这样做:

my_list = ['10', '100', '1,000', '10,000', '100,000']

int_list = [int(each_int.replace(',', '')) for each_int in my_list]

>>> print all(i*10==j for i,j in zip(int_list, int_list[1:]))
True

这将避免任何不必要的重复计算,也是我更快,因为它通过除法进行比较。我还将all([...])替换为all(...),因为all可以处理生成器,并且不必创建临时列表。