2012-10-12 44 views
-1

假设在123中有一个链接列表,每个整数都有一个点,head是1,next是2,next是3,如何将每个元素乘以一个数字,比方说3,这样新的链表指向3,6,9?你如何将一个链表中的每个点乘以一个数字x?

+7

Python没有内置链表类型你是问一下自己的链接列表类型(在这种情况下,你应该表现出来),或约正常Python列表(它们没有链接)? – interjay

回答

0

使用列表理解:

In [1]: lis=[1,2,3] 

In [2]: [x*3 for x in lis] 
Out[2]: [3, 6, 9] 


In [3]: num=123 

In [4]: [int(x)*4 for x in str(num)] #convert num to a string and iterate over it 
Out[4]: [4, 8, 12] 

In [5]: ''.join(str(int(x)*3) for x in str(num)) #to get something like 4812 
Out[5]: '4812' 
+0

这假定链表已经定义了一个迭代器,对于自定义类型可能是也可能不是。否则它将取决于列表。 –

+0

很酷,如果它是123 * 4呢?此方法可能不适用于要乘以的所有x值?抱歉,在关于我想要的问题中不清楚。 –

+0

@RahulSharma 123不是一个列表。 –

1
>>> list1 = [1, 2, 3] 
>>> [x * 3 for x in list1] 
[3, 6, 9] 
>>> 
0

的算法很简单:

def multiply(L, x): 
    if L.is_empty(): 
     return L 
    else: 
     return join(L.head * x, multiply(L.tail, x)) 

其中 “L.head” 是第一要素,L.tail是剩下的列表, join是一个函数,它把第一个参数作为列表的第一个元素放在第二个参数中(所以join(1,[2,3]) - > [1,2,3])。

Python没有简单的链接列表作为内置类型。 collections模块中有一个deque类型,它实现了一个双链表(并且可以像使用单链表一样使用)。

也许你正在实现自己的链表类(作业)?

0

假设你的列表是迭代:

>>> map(lambda x: x*3, [12, 1, 42]) 
[36, 3, 126] 
相关问题