Pra*_*ate 11 wolfram-mathematica
给出一个列表说
{"a", "b", "c", "d"}
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来生成这样的顺序子集列表(结果的顺序并不重要)
{
{"a"},
{"a b"},
{"a b c"},
{"a b c d"},
{"b"},
{"b c"},
{"b c d"},
{"c"},
{"c d"},
{"d"}
}
Run Code Online (Sandbox Code Playgroud)
Mr.*_*ard 19
我想我最喜欢这个:
set = {"a", "b", "c", "d"};
ReplaceList[set, {___, x__, ___} :> {x}]
Run Code Online (Sandbox Code Playgroud)
使用字符串连接:
ReplaceList[set, {___, x__, ___} :> "" <> Riffle[{x}, " "]]
Run Code Online (Sandbox Code Playgroud)
类似地,特定于字符串:
StringCases["abcd", __, Overlaps -> All]
Run Code Online (Sandbox Code Playgroud)
由于纳赛尔说我在作弊,这里有一个更加手动的方法,在大型套装上也有更高的效率:
ClearAll[f, f2]
f[i_][x_] := NestList[i, x, Length@x - 1]
f2[set_] := Join @@ ( f[Most] /@ f[Rest][set] )
f2[{"a", "b", "c", "d"}]
Run Code Online (Sandbox Code Playgroud)
tom*_*omd 14
Flatten[Partition[{a, b, c, d}, #, 1] & /@ {1, 2, 3, 4}, 1]
Run Code Online (Sandbox Code Playgroud)
给
{{a},{b},{c},{d},{a,b},{b,c},{c,d},{a,b,c},{b,c,d} , {A B C D}}
这个怎么样:
origset = {"a", "b", "c", "d"};
bdidxset = Subsets[Range[4], {1, 2}]
origset[[#[[1]] ;; #[[-1]]]] & /@ bdidxset
Run Code Online (Sandbox Code Playgroud)
这使
{{"a"}, {"b"}, {"c"}, {"d"}, {"a", "b"}, {"a", "b", "c"}, {"a", "b",
"c", "d"}, {"b", "c"}, {"b", "c", "d"}, {"c", "d"}}
Run Code Online (Sandbox Code Playgroud)
我更喜欢TomD的方法,但这是我想到的,没有字符串处理:
set = {"a", "b", "c", "d"};
n = Length@set;
Join @@ Table[set~Take~{s, f}, {s, n}, {f, s, n}] // Column
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |