Dan*_* Öz 1 string r list palindrome strsplit
我想结合 R 的 rev() 函数和 strsplit 函数来检查字符串是否是回文。我的想法是使用 strsplit() 将字符串分割成单个字母,然后对结果使用 rev 来反转字母的顺序。那么,说:
a = "summer"
Run Code Online (Sandbox Code Playgroud)
我们这样做:
b = strsplit(a,"")
Run Code Online (Sandbox Code Playgroud)
我们得到:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
Run Code Online (Sandbox Code Playgroud)
看起来应该可以。但对此使用 rev :
rev(b)
Run Code Online (Sandbox Code Playgroud)
并且输出不会改变:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
Run Code Online (Sandbox Code Playgroud)
现在,我已经缩小了答案,使其与“[[1]]”有关,我将其视为列表符号。如果我们这样做:
c = strsplit(a,"")[[1]]
我们得到:
[1]“s”“u”“m”“m”“e”“r”
即没有“[[1]]”。现在,如果我们在这里使用 rev(c),我们会得到所需的结果:
[1] "r" "e" "m" "m" "u" "s"
Run Code Online (Sandbox Code Playgroud)
同样,如果我们有:
d = 1:10
Run Code Online (Sandbox Code Playgroud)
并使用 rev(d),我们得到:
[1] 10 9 8 7 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
这两次成功尝试的共同点是缺乏列表符号。有人能告诉我 R 如何处理我们的初始字符串以及为什么使用带有 strsplit 的列表表示法可以让我们正确使用 rev 吗?
这里发生的情况是,当您调用 时rev(b),您正在反转一个列表,其中只有一个元素。该元素是一个字符向量。所以相反的操作只会返回相同的结果:
b <- strsplit(a, "")
rev(b)
[[1]]
[1] "s" "u" "m" "m" "e" "r"
Run Code Online (Sandbox Code Playgroud)
但是,当您访问该列表的第一个(也是唯一一个)元素时,您将反转字母向量:
rev(b[[1]])
[1] "r" "e" "m" "m" "u" "s"
Run Code Online (Sandbox Code Playgroud)
如果您获取一个包含多个元素的列表并将其反转,您将看到元素反转:
lst <- list(a=c("v", "x"), b=c("y", "z"))
lst
$a
[1] "v" "x"
$b
[1] "y" "z"
rev(lst)
$b
[1] "y" "z"
$a
[1] "v" "x"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |