在Python中,我可以找到连接两个列表的唯一方法是list.extend
修改第一个列表.是否有任何串联函数返回其结果而不修改其参数?
我有一个大小< N的列表,我想用一个值填充大小为N.
当然,我可以使用类似下面的东西,但我觉得应该有一些我错过的东西:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
Run Code Online (Sandbox Code Playgroud) 我有两个清单:
big_list = [2, 1, 2, 3, 1, 2, 4]
sub_list = [1, 2]
Run Code Online (Sandbox Code Playgroud)
我想删除big_list中的所有sub_list事件.
结果应该是 [2, 3, 4]
对于字符串,您可以使用此:
'2123124'.replace('12', '')
Run Code Online (Sandbox Code Playgroud)
但AFAIK这对列表不起作用.
这不是从列表中删除子列表的重复,因为我想从大列表中删除所有子列表.在另一个问题中,结果应该是[5,6,7,1,2,3,4]
.
更新:为简单起见,我在此示例中使用了整数.但列表项可以是任意对象.
UPDATE2:
如果big_list = [1, 2, 1, 2, 1]
和sub_list = [1, 2, 1]
,我希望结果是[2, 1]
(像'12121'.replace('121', '')
)
UPDATE3:
我不喜欢将StackOverflow中的源代码复制+粘贴到我的代码中.这就是我在软件建议中提出第二个问题的原因:https://softwarerecs.stackexchange.com/questions/51273/library-to-remove-every-occurrence-of-sub-list-from-list-python
Update4:如果您知道要进行此方法调用的库,请将其写为答案,因为这是我首选的解决方案.
测试应通过此测试:
def test_remove_sub_list(self):
self.assertEqual([1, 2, 3], remove_sub_list([1, 2, 3], []))
self.assertEqual([1, 2, 3], remove_sub_list([1, 2, 3], [4]))
self.assertEqual([1, 3], remove_sub_list([1, 2, …
Run Code Online (Sandbox Code Playgroud) 我想在Perl中进行排列.例如,我有三个数组:["big", "tiny", "small"]
然后我有["red", "yellow", "green"]
,也有["apple", "pear", "banana"]
.
如何得到:
["big", "red", "apple"] ["big", "red", "pear"] ..etc.. ["small", "green", "banana"]
我理解这叫做排列.但我不知道该怎么做.另外我不知道我可以拥有多少阵列.可能有三个或四个,所以我不想做嵌套循环.
在滑动对中迭代列表的Pythonic有效方法是什么?这是一个相关的例子:
>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> for x, y in itertools.izip(l, l[1::2]): print x, y
...
a b
b d
c f
Run Code Online (Sandbox Code Playgroud)
这是成对迭代,但我们如何在滑动对上进行迭代?意味着迭代对:
a b
b c
c d
d e
etc.
Run Code Online (Sandbox Code Playgroud)
这是对的迭代,除了每次将1对元素滑动而不是2个元素.谢谢.
作为枚举集合的更大问题的一部分,我需要编写一个OCaml函数'choose',它接受一个列表并输出作为由该列表的元素组成的所有可能的大小为k的序列的列表(不重复序列,可以通过排列获得彼此).它们放在结束列表中的顺序无关紧要.
例如,
choose 2 [1;2;3;4] = [[1;2];[1;3];[1;4];[2;3];[2;4];[3;4]]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我想让整个事情变得懒惰,输出一个懒惰的列表,但是如果你有一个严格的解决方案,那也将非常有用.
ocaml functional-programming lazy-evaluation list-manipulation
是否有一个内置的python与一组列表的tupler相同,或类似的东西:
def tupler(arg1, *args):
length = min([len(arg1)]+[len(x) for x in args])
out = []
for i in range(length):
out.append(tuple([x[i] for x in [arg1]+args]))
return out
Run Code Online (Sandbox Code Playgroud)
所以,例如:
tupler([1,2,3,4],[5,6,7])
Run Code Online (Sandbox Code Playgroud)
收益:
[(1,5),(2,6),(3,7)]
Run Code Online (Sandbox Code Playgroud)
或者也许有适当的pythony方式这样做,还是有类似的发电机???
我知道map函数接受列表的每个元素(一个序列)并将一个函数应用于它.递归(并且不考虑终止条件等)
map(s, f) = f(s.head) :: map(s.tail, f)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个像这样的功能
foo(s, f) = f(s) :: map(s.tail, f).
Run Code Online (Sandbox Code Playgroud)
所以'mapper'是在子列表而不是单个元素上调用映射函数的地方.在lisp术语中,我正在寻找一个地图列表,而不是mapcar.这样的事情是存在的,还是我必须自己滚动(或使用递归)?
或者,我将采用一个函数,将序列作为输入,并返回一系列中到端子序列,即
bar(s, f) = s :: bar(s.tail, f)
Run Code Online (Sandbox Code Playgroud) 在其他语言(ruby,python,...)我可以使用zip(list1, list2)
这样的工作:
如果list1 is {1,2,3,4}
和list2 is {a,b,c}
然后zip(list1, list2)
会回来:{(1,a), (2,b), (3,c), (d,null)}
这种方法在.NET的Linq扩展中是否可用?
我正在尝试在Haskell中实现Ravi Sethi的Little Quilt语言.可以在这里看到Sethi的小被子的概述:http://poj.org/problem?id = 3201
这是我到目前为止的功能:
import Data.List.Split
rotate :: Int -> [a] -> [a]
rotate n xs = iterate rot xs !! n
where
rot xs = last xs : init xs
turn :: [a] -> [a]
turn x = rotate 2 x
grid :: Int -> [String] -> String
grid n = unlines . map concat . chunksOf n
printAtom :: [String] -> IO()
printAtom x = putStrLn $ grid 2 x
Run Code Online (Sandbox Code Playgroud)
我实现rotate
了在我的 …