2013-10-14 137 views
0

这三个功能是我学习指南的一部分,非常感谢您的帮助。 在每种情况下,该函数都会返回一个值(所以使用return语句):它不会打印其任何参数的值(不打印语句)或mutate(更改其值)。使用Python的基本列表操作

1)repl函数有三个参数: oold是任何值; ?新是任何值; xs是一个列表。

Example: 
>>> repl('zebra', 'donkey', ['mule', 'horse', 'zebra', 'sheep', 'zebra']) 
['mule', 'horse', 'donkey', 'sheep', 'donkey'] 

它返回一个新的列表,通过用new来替换xs中的每一个old。

它不得改变列表xs;即从函数返回后,为xs给出的实际参数必须是以前的值。

>>> friends = ['jules', 'james', 'janet', 'jerry'] 
>>> repl('james', 'henry', friends) 
['jules', 'henry', 'janet', 'jerry'] 
>>> friends 
['jules', 'james', 'janet', 'jerry'] 

2)搜索功能在列表中查找值。它有两个参数: ◦y是要搜索的值。 ◦xs是正在搜索的列表。

它返回y中第一次出现的索引,如果它发生的话;否则为-1。

Examples: 
>>> words = ['four', 'very', 'black', 'sheep'] 
>>> search('four', words) 
0 
>>> search('sheep', words) 
3 
>>> search('horse', words) 
-1 

3)双打功能被赋予号码的列表,并返回包含每个数字的双打在给定列表的新列表。

Example: 
>>> doubles([1, 3, 7, 10]) 
[2, 6, 14, 20] 

它必须发生变异的定列表:

>>> salaries = [5000, 7500, 15000] 
>>> doubles(salaries) 
[10000, 15000, 30000] 
>>> salaries 
[5000, 7500, 15000] 

这是不使用除追加任何列表的方法来完成。 (特别是,您可能不会使用索引或计数作为搜索功能。)

尽管您可以使用list len函数和列表操作+,*,索引,切片和==来比较列表或元素。您将需要使用其中一些但不是全部。

任何帮助,如我在介绍中提到的非常感谢。

到目前为止,我所拥有的就是。

def repl (find, replacement, s): 
    newString = '' 
    for c in s: 
     if c != find: 
      newString = newString + c 
     else: 
      newString = newString + replacement 
    return newString 

def search(y, xs): 
     n = len(xs) 
     for i in range(n): 
      if xs[i] == y: 
       return i 
     return -1 

和....

def search(key,my_list): 
    if key in my_list: 
    return my_list.index(key) 
    else: 
    return 

我不知道需要else语句后可能返回的。

+3

您有什么问题? – Paco

+0

我没有得到正确的答案,如示例中所示。还有最后两个问题的代码,我还没有编译。我试图用这种方式来恢复记忆,并且在记住正确的解决方案时遇到了一些麻烦。 – HTCone

+1

你可以用你在这里添加的细节来编辑你的文章吗?你将有更好的机会找到正确的答案 – Paco

回答

0
def relp(old,new,my_list): 
    final = [] 
    for x in my_list: 
    if x is old: 
     final.append(new) 
    else: 
     final.append(x) 
    return final 


def search(key,my_list): 
    if key in my_list: 
     return my_list.index(key) 
    else: 
     return -1 

def doubles(my_list): 
    return[x*x for x in my_list] 
0

我怀疑这个教训是约列表内涵

doubles = lambda my_list: [x*2 for x in my_list] 
repl = lambda old_t,new_t,my_list: [x if x != old_t else new_t for x in my_list] 

print repl("cow","mouse",["cow","rat","monkey","elephant","cow"]) 
print doubles([1,2,3,4,'d'])