我需要连接元组

  • 本文关键字:元组 连接 python
  • 更新时间 :
  • 英文 :


我需要连接a、b、c、d,并在每个元组的开头添加字母是我的代码的一个例子,有一个zip函数,但不能使用zip函数这些只是映射、过滤器、元组,我很乐意帮助进行此类输出(('A:',[98](,('B:',[90,81](,('D:',[68,63,61](,('失败:',[20,45],3](

我需要一个zip算法的替代品

def convert(list1):
A = tuple(filter(lambda x:100>=x>=91 ,list1))
B = tuple(filter(lambda x:81<=x<=90 ,list1))
C = tuple(filter(lambda x:71<=x<=80 ,list1))
D = tuple(filter(lambda x:56<=x<=70 ,list1))
E = tuple(filter(lambda x:0<=x<=56 ,list1))
#x = zip(['A:', 'B:','C', 'D:', 'Fail:'], ([A], [B],[C], [D], [E]))
return tuple(filter(lambda x: x[1][0], x))
lst = (20, 45, 90, 3, 68, -30, 81, 98, 104, 63, 61)
print(convert(lst))

过滤器的输出是迭代器。您需要将其转换为列表才能获得元组的第二部分。

考虑到键的数量相对有限,该函数可以直接构建输出元组,而无需使用zip:

def convert(list1):
A = list(filter(lambda x:100>=x>=91 ,list1))
B = list(filter(lambda x:81<=x<=90 ,list1))
C = list(filter(lambda x:71<=x<=80 ,list1))
D = list(filter(lambda x:56<=x<=70 ,list1))
E = list(filter(lambda x:0<=x<=55 ,list1))
R = ( ('A:',A), ('B:',B), ('C:',C), ('D:',D), ('Fail:',E) )
return tuple(filter(lambda t: t[1], R))

输出:

lst = (20, 45, 90, 3, 68, -30, 81, 98, 104, 63, 61)
print(convert(lst))
(('A:', [98]), ('B:', [90, 81]), ('D:', [68, 63, 61]), ('Fail:', [20, 45, 3]))

您还可以通过在您的5个变量中将密钥和列表分配为元组来完全避免合并问题:

def convert(list1):
A = ('A:',list(filter(lambda x:100>=x>=91 ,list1)))
B = ('B:',list(filter(lambda x:81<=x<=90 ,list1)))
C = ('C:',list(filter(lambda x:71<=x<=80 ,list1)))
D = ('D:',list(filter(lambda x:56<=x<=70 ,list1)))
E = ('Fail:',list(filter(lambda x:0<=x<=55 ,list1)))
return tuple(filter(lambda t: t[1], (A,B,C,D,E)))

如果允许您使用for循环,则可以更有效地实现该功能:

def convert(list1):
R = (("",[]),("A:",[]),("B:",[]),("C:",[]),("D:",[]),("Fail:",[]),("",[]))
for x in list1:
i = (x<0) + (x<56) + (x<71) + (x<81) + (x<91) + (x<101)
R[i][1].append(x)
return tuple(filter(lambda t: t[0] and t[1], R))

您可以准备一个具有提前初始化的键和列表的结果元组(R(,而不是遍历这些值5次。然后计算一个指数,将每个分数相加。所得到的元组是用一个额外的";"桶";在开始和结束时捕获越界值,而不需要循环中的特殊条件。

为了确定指数,将范围的极限值与结束于得分值之上的每个范围的得分计数1进行比较。因此,例如,75分将出现在索引3,因为(x<0) + (x<56) + (x<71) + (x<81) + (x<91) + (x<101)将产生(0 + 0 + 0 + 1 + 1 + 1)(假定True为1,False为0(

最新更新