这是UNI的“编程基础”课程的作业的一部分。 它说:
记下
codes(lst,cods)
函数,其中lst
是ccccyyyymmgg
中的一系列字符串(cccc
是随机字符,yyyymmgg
是日期),cods
是一系列4个字符的字符串。该功能应该像这样工作: 如果lst中的'cccc'等于cods中的字符串,则包含cccc的元素将以['cccc',dd,mm,yyyy]格式打印;否则以['ccccyyyymmdd']格式打印。
例如, 如果
"AcDa20140930"
是lst
的元素且"ACDA"
位于cods
, 然后列表"AcDa20140930"
中的元素lst
被4个元素替换"ACDA", 30, 9, 2014
。
我试图像这样解决它:
def codes(lst, cods):
lst1=[]
for element in lst:
cccc = lst[0:3]
yyyy = lst[4:7]
mm = lst[8:9]
dd = lst[10:11]
for code in cods:
if cccc == code:
lst1 += cccc, dd, mm, yyyy
return lst1
first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)
[CODE MODIFIED]:现在输出为[]。 有什么想法吗?
答案 0 :(得分:0)
试试这个,它有效。
def codes(lst, cods):
toAdd = []
c = 0
for ind, elem in enumerate(lst):
if elem[:4] not in cods:
toAdd.append(elem + str(ind + c))
lst.remove(elem)
c += 1
for ind, elem in enumerate(lst):
tmp = []
tmp.append(elem[:4])
tmp.append(elem[10:])
tmp.append(elem[8:10])
tmp.append(elem[4:8])
lst.insert(ind, tmp)
lst.remove(elem)
[lst.insert(int(elem[-1]), elem[:len(elem) - 1]) for elem in toAdd]
return lst
first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)
['Cara20130716', ['Tara', '01', '06', '2008'], ['PALA', '31', '12', '1996'], 'Melo19601023']
如果您希望匹配不区分大小写。
def codes(lst, cods):
for ind, cod in enumerate(cods):
cods[ind] = cod.lower()
toAdd = []
c = 0
for ind, elem in enumerate(lst):
if elem[:4].lower() not in cods:
toAdd.append(elem + str(ind+c))
lst.remove(elem)
c += 1
for ind, elem in enumerate(lst):
tmp = []
tmp.append(elem[:4])
tmp.append(elem[10:])
tmp.append(elem[8:10])
tmp.append(elem[4:8])
lst.insert(ind, tmp)
lst.remove(elem)
[lst.insert(int(elem[-1]), elem[:len(elem) - 1]) for elem in toAdd]
return lst
first = ['Cara20130716', 'Tara20080601', 'PALA19961231', 'Melo19601023']
secnd = ['PALA', 'CARA', 'Tara']
print codes(first, secnd)
[['Cara', '16', '07', '2013'], ['Tara', '01', '06', '2008'], ['PALA', '31', '12', '1996'], 'Melo19601023']