标题说明了大部分问题。 我们需要再次写下。我们得到了一份总统名单:
preslst=[['George Washington',1732,1788],['John Adams',1735,1796],['Thomas Jefferson',1743,1800],['James Madison',1751,1808],
['James Monroe',1758,1816],['John Quincy Adams',1767,1824],['Andrew Jackson',1767,1828],['Martin Van Buren',1782,1836],
['William Henry Harrison',1773,1840],['John Tyler',1790,1840],['James K. Polk',1795,1844],['Zachary Taylor',1784,1848],
['Millard Fillmore',1800,1850],['Franklin Pierce',1804,1858],['James Buchanan',1791,1857],['Abraham Lincoln',1809,1861],
['Andrew Johnson',1808,1865],['Ulysses S. Grant',1822,1869],['Rutherford B. Hayes',1822,1877],['James A. Garfield',1831,1881],
['Chester A. Arthur',1829,1881],['Grover Cleveland',1837,1885],['Benjamin Harrison',1833,1889],['Grover Cleveland',1837,1893],
['William McKinley',1843,1897],['Theodore Roosevelt',1858,1901],['William Howard Taft',1857,1909],['Woodrow Wilson',1856,1913],
['Warren G. Harding',1865,1921],['Calvin Coolidge',1872,1923],['Herbert Hoover',1874,1929],['Franklin D. Roosevelt',1882,1933],
['Harry S. Truman',1884,1945],['Dwight D. Eisenhower',1890,1953],['John F. Kennedy',1917,1961],['Lyndon B. Johnson',1908,1963],
['Richard M. Nixon',1913,1969],['Gerald Ford',1913,1974],['Jimmy Carter',1924,1977],['Ronald Reagan',1911,1981],
['George H. Bush',1924,1989],['Bill Clinton',1946,1993],['George H.W. Bush',1946,2001],['Barack Obama',1961,2009],
['Donald Trump',1946,2017]]
我们被要求定义一个函数(arg1 =在列表中格式化的总统名称,arg2 = preslst),它将以递归方式遍历列表并返回包含正确名称的列表的索引位置。
这就是我目前的情况:
def presPosition(pres,preslst):
for i in range(0,len(preslst)):
print('search')
presname = preslst[i][0]
if presname == pres:
print("FOUND")
foundpres = preslst[0]
return preslst.index(foundpres)
else:
return presPosition(pres,preslst[1:])
Ex:presPosition('John Adams',preslst)返回的值应为1.
我一直得到0作为返回值,我理解为什么因为在else语句中传递的preslst将具有我正在寻找的名称作为传递列表中的第一项。那么如何让函数返回它在原始列表中的位置呢?
提前致谢。
答案 0 :(得分:0)
这是一个奇怪的练习,绝对不适合递归。但是,这是你可以做的事情。找到元素时返回列表的长度,最后从原始列表的大小中减去它:
def presPosition(pres,preslst):
print('search')
presname = preslst[0][0]
if presname == pres:
print("FOUND")
return len(preslst)
else:
return presPosition(pres,preslst[1:])
preslst = [...] # your list
print(len(preslst) - presPosition('James Madison', preslst)) # outputs 3
顺便说一下,你不需要for循环,因为你只使用第一个元素然后返回,所以我删除了它。
答案 1 :(得分:0)
您将获得0
,因为在每次迭代后,您都会将preslst[1:]
传递给下一次迭代。然后返回preslst.index(foundpres)
,它来自上面的列表,它始终是第0个索引。
相反,我建议遵循。
def presPosition(pres,preslst, next_index=0):
print('search')
if next_index == len(preslst):
print("NOT FOUND")
return
presobj = preslst[next_index]
presname = presobj[0]
if presname == pres:
print("FOUND")
return preslst.index(presobj) # return next_index
else:
return presPosition(pres,preslst, next_index+1)