我是Haskell的新手,我正在尝试生成列表中所有连续的子列表.
我目前有以下内容:
listSublists :: [a] -> [[a]]
listSublists [] = [[]]
listSublists xs = [xs] ++ listSublists (init xs)
Run Code Online (Sandbox Code Playgroud)
我知道上面的函数会生成删除最后一个元素的子列表,但我不知道如何完成我的伪代码.
我的伪代码基本上是,
拿整个完整列表,删除尾部.将(x:xs)的xs传递给listSublists
例如,xs = [1,2,3] [xs] ++ listSublists(init xs)将生成[1,2,3,4],[1,2,3],[1,2],[1] ],[]我试图继续将[2,3,4]作为xs传递,直到列表用完为止.
有人可以给我一些指示吗?还是我以完全错误的方式思考?
我必须操作的列表更长,但是例如让我们使用一个列表 [3,5,0,6,8,9,7,0,1,0].零之间的元素数量不是恒定的.我想将零之前的术语分组到子列表中.我正在寻找的是[[3,5],[6,8,9,7],[1]]; 零分割条款但不包括在子列表中.
我不认为我可以使用该split功能,因为我正在对元素进行分组,所以我一直试图找出一种以这种方式分组的方法.
大家!
我正在尝试将新子列表添加到现有列表中,但我不确定如何执行此操作.这是我的代码:
data = [[4,5],[3,7]]
search = 9
for sublist in data:
if search in sublist:
sublist.append(0)
print("there", sublist)
break
else:
print("not there")
break
def sublist():
[5,6]
print[data]
Run Code Online (Sandbox Code Playgroud)
但是,如果不存在搜索,则子列表不会添加到原始列表中.我怎样才能做到这一点?
干杯! 5813
如何将一个列表的每个项目附加到另一个列表的每个子列表?
a = [['a','b','c'],['d','e','f'],['g','h','i']]
b = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
结果应该是:
[['a','b','c',1],['d','e','f',2],['g','h','i',3]]
Run Code Online (Sandbox Code Playgroud)
请记住,我想对一个非常大的列表执行此操作,因此效率和速度很重要。
我试过了:
for sublist,value in a,b:
sublist.append(value)
Run Code Online (Sandbox Code Playgroud)
它返回“ValueError:要解压的值太多”
也许 listindex 或 listiterator 可以工作,但不知道如何在这里应用
我有一副牌的数组列表 1-52 并且它们被洗牌,我想基本上将牌分为两半索引(0,25)和(26,51)以处理两个玩家。但是我只看到说使用 List<> 的响应,尽管我希望让每个玩家的牌组都有一个数组列表,以免干扰其他已经创建的方法。有没有办法让两个玩家的牌组都作为数组列表?
import java.util.ArrayList;
import java.util.Collections;
public class Methods {
public static ArrayList<Integer> deck = new ArrayList<Integer>();
public static ArrayList<Integer> deckPlayerOne = new ArrayList<Integer>();
public static ArrayList<Integer> deckPLayerTwo = new ArrayList<Integer>();
public static ArrayList<Integer> generateDeck(){
for(int i=1; i<53; i++){
deck.add(i);
}
return deck;
}
public static ArrayList<Integer> shuffle(){
Collections.shuffle(deck);
return deck;
}
public static void splitDeck(){
// deckPlayerOne = deck.subList(0, 25); <---- location of error
}
public static ArrayList<Integer> playerOneDeck(){
}
}
public static ArrayList<Integer> platerTwoDeck(){
} …Run Code Online (Sandbox Code Playgroud) 我看了,但我没有找到答案(我对python很新).
问题很简单.我有一个由子列表组成的列表:
ll
[[1,2,3], [4,5,6], [7,8,9]]
Run Code Online (Sandbox Code Playgroud)
我要做的是创建一个字典,其中每个子列表的第一个元素都是关键字,并且值为相应的子列表的值,如:
d = {1:[2,3], 4:[5,6], 7:[8,9]}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我了解到 Python 列表也可以使用负索引遍历,所以我尝试使用负索引对列表进行切片/子列表,但我无法将其切片直到结束。
我的清单是:
areas = ["hallway", 11.25, "kitchen", 18.0, "living room", 20.0, "bedroom", 10.75, "bathroom", 9.50]
Run Code Online (Sandbox Code Playgroud)
知道切片语法是[start:end]并且不计算结束索引,我做到了,upstairs = areas[-4:0]但这并没有给我列表的最后一个元素。
我正在尝试找出一种优雅/有效的解决方案,用于在具有某些约束的情况下在列表中查找子列表。
例如,给定以下列表:
values = ['a', 'b', 'c', 'd', 'e', 'f']
Run Code Online (Sandbox Code Playgroud)
以及 maxLength 的值:
maxLength = 4
Run Code Online (Sandbox Code Playgroud)
查找值列表中的所有子列表,使得:
因此,在此示例中,以下是可接受的解决方案:
[['a'], ['b'], ['c'], ['d'], ['e'], ['f']]
[['a', 'b'], ['c'], ['d'], ['e'], ['f']]
...
[['a', 'b'], ['c', 'd', 'e'], ['f']]
...
[['a', 'b', 'c', 'd'], ['e', 'f']]
...
[['a', 'b'], ['c', 'd', 'e', 'f']]
Run Code Online (Sandbox Code Playgroud)
这些是不可接受的:
[['a', 'b'], ['d', 'e'], ['f']] #Error: not consecutive, 'c' is missing
[['a', 'b', 'c'], ['c', 'd', 'e'], ['f']] #Error: overlapping, 'c' …Run Code Online (Sandbox Code Playgroud) 我正在阅读Ivan Bratko的人工智能Prolog编程书籍,之前我没有使用过Prolog的经验.在书中,列表的子列表关系表示为:
S is a sublist of L if:
1) L can be decomposed into two lists, L1 and L2, and
2) L2 can be decomposed into two lists, S and some L3.
Run Code Online (Sandbox Code Playgroud)
关系如下:
sublist(S, L) :-
conc(L1, L2, L),
conc(S, L3, L2).
conc([], L, L).
conc([X|L1], L2, [X|L3]) :-
conc(L1, L2, L3).
Run Code Online (Sandbox Code Playgroud)
对我来说,为什么我们不只是将列表分解为两个列表并检查其中一个列表是否与S匹配,这似乎很奇怪?
我想检查列表 L1 的元素是否在列表 L2 中以相同的顺序连续出现。
例如 - check([b,c],[a,b,c,d]) 必须返回 true 而 check([b,d],[a,b,c,d]) 必须返回 false
我看了类似的帖子Prolog - 第一个列表是第二个列表的子列表?并且还尝试了类似的解决方案,但是每当我尝试检查元素是否存在时,我都无法检查排序是否连续
check( [], _ ).
check( [X|XS], [X|XSS] ) :- sublist( XS, XSS ).
check( [X|XS], [_|XSS] ) :- sublist( [X|XS], XSS ).
Run Code Online (Sandbox Code Playgroud)
如果我尝试检查排序是否正确,那么我的代码就会中断。
check( [], _ ).
check( [X|XS], [X|XSS] ) :- sublist( XS, XSS ).
Run Code Online (Sandbox Code Playgroud)