标题说明了大部分问题。我们需要递归地写这个。我们得到了一份总统名单:
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=presidents name,格式为列表中的格式,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:])
例如:presPosition('John Adams',preslst)返回值应该是1。你知道吗
我一直得到0作为返回值,我理解为什么,因为在else语句中传递的preslst将把我要查找的名称作为传递列表中的第一项。那么如何让函数返回它在原始列表中的位置呢?你知道吗
提前谢谢。你知道吗
以下是如何使用
enumerate()
和for-loop
:您得到的是
0
,因为在每次迭代之后,您将preslst[1:]
传递给下一次迭代。返回上面列表中的preslst.index(foundpres)
,它总是第0个索引。你知道吗我建议你跟我来。你知道吗
这是一个奇怪的练习,绝对不适合递归。不过,你可以做点什么。找到元素时返回列表的长度,最后从原始列表的大小中减去:
顺便说一句,您不需要for循环,因为您只使用第一个元素然后返回,所以我删除了它。你知道吗
相关问题 更多 >
编程相关推荐