我将在我的程序中使用许多列表,但我需要确保它们的长度相同,否则我将在以后的代码中遇到问题。
在Python中执行此操作的最佳方法是什么?
例如,如果我有三个列表:
a = [1, 2, 3]
b = ['a', 'b']
c = [5, 6, 7]
我可以这样做:
l = [len(a), len(b), len(c)]
if max(l) == min(l):
# They're the same
有没有更好或更多的Pythonic方式来做到这一点?
答案 0 :(得分:25)
假设您有一个非空的列表列表,例如
my_list = [[1, 2, 3], ['a', 'b'], [5, 6, 7]]
你可以使用
n = len(my_list[0])
if all(len(x) == n for x in my_list):
# whatever
这会短路,所以当遇到长度错误的第一个列表时它会停止检查。
答案 1 :(得分:8)
len(set(len(x) for x in l)) <= 1
答案 2 :(得分:6)
一些功能性的Python:
>>> len(set(map(len, (a, b, c)))) == 1
False
答案 3 :(得分:3)
对max
和min
的每次调用都会遍历整个列表,但您并不需要这样做;您可以通过一次遍历检查所需的属性:
def allsamelength(lst_of_lsts):
if len(lst_of_lsts) in (0,1): return True
lfst = len(lst_of_lsts[0])
return all(len(lst) == lfst for lst in lst_of_lsts[1:])
如果其中一个列表与第一个列表的长度不同,这也会短路。
答案 4 :(得分:0)
如果l是长度列表:
l = [len(a), len(b), len(c)]
if len(set(l))==1:
print 'Yay. List lengths are same.'
否则,使用原始列表,可以创建列表列表:
d=[a,b,c]
if len(set(len(x) for x in d)) ==1:
print 'Yay. List lengths are same.'