具有列表理解的变量

时间:2016-08-12 18:01:07

标签: python list for-loop list-comprehension

我试图使用列表理解来重写我的旧代码,我想知道是否有一种方法可以使用名为" result"的变量。而不是int(round(sorted_l[sorted_l.index(i)] // sorted_l1[sorted_l1.index(i1)])) 在下面的代码中,因为我需要在函数中重用它。

list1 = [2, 4, 6]
list2 = [1, 2, 3]

def a_function(lst, lst1):
    sorted_l = sorted(lst)
    sorted_l1 = sorted(lst1)
    my_list = [int(round(sorted_l[sorted_l.index(i)] // sorted_l1[sorted_l1.index(i1)])) for i in sorted_l for i1 in sorted_l1]
    most_common = lst.count()
    print my_list

2 个答案:

答案 0 :(得分:1)

sorted_l[sorted_l.index(i)]i完全相同。

sorted_l1[sorted_l1.index(i1)]i1完全相同。

你正在进行整数除法,它会截断小数,所以你要舍入什么?

int(round( v1 // v2 ))

话虽如此,所有这些都可以简化为

[int(round(i / i1)) for i in sorted_l for i1 in sorted_l1]

输出

[2, 1, 0, 4, 2, 1, 6, 3, 2]
  

我想知道是否有办法使用名为“result”的变量

是,将该列表分配给名为result的变量。

如果你想找到“最常见的”元素,你不能使用列表理解,但你可以这样做

from collections import Counter
result = [int(round(i / i1)) for i in list1 for i1 in list2]
most_common = Counter(result).most_common()[0][0] # 2 occurs most frequently

答案 1 :(得分:0)

我不确定你要做什么,但我写下面的函数与你的函数相当,直到行most_common = lst.count()无效,正如Chris Rands在评论中指出的那样。

如果你澄清了你实际想要实现的目标,我可以相应地编辑这段代码。

list1 = [2, 4, 6]
list2 = [1, 2, 3]

def a_function(a, b):
    sorted_a = sorted(a)
    sorted_b = sorted(b)

    for element_a in sorted_a:
        for element_b in sorted_b:

            # Can someone smarter than me let me know if
            # anything in this line is redundant?
            yield int(round(element_a)) // element_b


print(list(a_function(list1, list2)))

<强>输出

[2, 1, 0, 4, 2, 1, 6, 3, 2]