在Python中,计算两个列表之间差异的最佳方法是什么?
例
A = [1,2,3,4]
B = [2,5]
A - B = [1,3,4]
B - A = [5]
Run Code Online (Sandbox Code Playgroud) 我想echo
在bash中使用打印出一串字符后跟一个回车符.我查看了手册页,发现echo -e
将echo
解释反斜杠转义字符.使用它,我可以说echo -e 'hello\r'
,它会像这样打印
$>echo -e 'hello\r'
hello
$>
Run Code Online (Sandbox Code Playgroud)
所以看起来它正确地处理了回车.我还发现echo -n
在手册页中将停止echo
插入换行符,当我这样做时它看起来像是有效的
$>echo -n 'hello\r'
hello\r$>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是在这两个相结合-e
和-n
.我试过每个echo -e -n 'hello\r'
,echo -n -e 'hello\r'
,echo -en 'hello\r'
,和echo -ne 'hello\r'
没有东西印像这样:
$>echo -ne 'hello\r'
$>
Run Code Online (Sandbox Code Playgroud)
有没有我在这里缺少的东西,或者这些-e
和-n
选项不能一起使用?
我正在寻找使用任意数量的参数调用Javascript构造函数的解决方案,并找到了一些好的SO帖子,这让我相信这三个调用应该是一样的.但是,至少在rhino和node.js中,它们不会:
1. f = Date.bind(Date, 2000,0,1)
2. g = Date.bind.call(Date, 2000, 0, 1)
3. h = Date.bind.apply(Date, [2000, 0, 1])
Run Code Online (Sandbox Code Playgroud)
第一个有所需的结果:
print(new f()) //=> Sat Jan 01 2000 00:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)
但其他两个不:
print(new g()) //=> Thu Feb 01 1900 00:00:00 GMT-0500 (EST)
print(new h()) //=> Wed Jun 01 1904 00:00:00 GMT-0400 (EST)
Run Code Online (Sandbox Code Playgroud)
所以有些东西在某处乱了.关于什么的想法?难道仅仅是一个坏主意,东西混合像apply
,bind
和/或call
用new
?
如果我没有弄错的话,作为XCode的一部分安装的编译器等使用llvm.但我找不到llvm-config二进制文件来生成适当的标志,用于命令行编译到llvm目标.macOS上的这种东西在哪里?
我知道我可以通过MacPorts或Homebrew安装一个新的llvm,但我不想复制已经存在的内容; 我只想要一种方法来获得系统配置.
我有一个通过Bundler运行的RSpec套件,它使用Aruba测试了许多不同的命令行应用程序.它运行正常...只要被测试的命令本身不是使用Bundler在Ruby中编写的.但我无法弄清楚如何防止RSpec套件的bundler配置干扰自己使用Bundler的命令的执行 - 至少,不是没有极端措施.
我已经试过各种排列unset_bundler_env_vars
和with_clean_env
,都无济于事.这是我认为可行的技术示例:
describe 'my ruby app' do
before :each { unset_bundler_env_vars }
it 'should work' do
Bundler.with_clean_env { run_simple ruby_command_name }
end
end
Run Code Online (Sandbox Code Playgroud)
我也试过unset_bundler_env_vars
没有with_clean_env
,反之亦然,以防他们互相干扰.没有骰子.
我得到它的唯一方法是手动按摩Aruba的环境副本,如下所示:
before :all do
aruba.environment.tap do |env|
if env.include? 'BUNDLE_ORIG_PATH' then
env['PATH'] = env['BUNDLE_ORIG_PATH']
%w(BUNDLE_BIN_PATH BUNDLE_GEMFILE BUNDLE_ORIG_PATH GEM_HOME RBENV_DIR
RBENV_HOOK_PATH RUBYLIB RUBYOPT).each do |key|
env.delete key
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
肯定有更好的办法.测试套件和被测试的命令都不应该知道或关心对方编写的语言.我使用Aruba和Bundler的测试代码不需要知道如何bundle exec
影响过程环境的细节.
那么我做错了什么?我该怎么做?
我想对集合进行散列。好吧,SetHashes,因为它们需要是可变的。
事实上,我想用同一个 SetHash 的多个相同副本来初始化我的 Hash。
我有一个包含新哈希键的数组: @keys
我已经在标量变量中初始化了我的 SetHash: $set
我正在寻找一种干净的方法来初始化哈希。
这有效:
my %hash = ({ $_ => $set.clone } for @keys);
Run Code Online (Sandbox Code Playgroud)
(括号是优先需要的;没有它们,赋值%hash
是for
循环体的一部分。我可以将其更改为非后缀 for 循环或进行其他几个小更改中的任何一个,以稍微获得相同的结果不同的方式,但这不是我在这里感兴趣的。)
相反,我有点希望我可以使用 Raku 的一个漂亮的超级操作员,也许是这样的:
my %hash = @keys »=>» $set;
Run Code Online (Sandbox Code Playgroud)
当$set
一个简单的字符串或数字,但一个 SetHash?
Array >>=>>> SetHash can never work reliably: order of keys in SetHash is indeterminate
Run Code Online (Sandbox Code Playgroud)
很高兴知道,但我不希望它以任何顺序超过 RHS 。这就是我使用 hyperop 的右指向版本的原因:所以它会根据需要复制 RHS 以将其与 LHS 匹配。在这种表达中,有什么办法可以说“哟,乐,把它当作一个标量。不,真的。”?
我尝试了一个显式 Scalar 包装器(这会使值更难获得,但这是一个实验):
my %map = @keys »=>» $($set,)
Run Code Online (Sandbox Code Playgroud)
这让我收到了这条消息:
Lists on either …
Run Code Online (Sandbox Code Playgroud) 我原以为这个问题是不可能的; 据我所知,Javascript的正则表达式风格没有递归插值,也没有漂亮的.NET平衡组功能.然而就像regex.alf.nu上的问题12 那样:匹配平衡对<
和>
.除非在集合中有其他一些模式我没有得到.
那么......这可能吗?如果是这样,怎么样?
笔记:
我知道这对于真正的正则表达式来说是不可能的,但基于挑战,似乎它必须有可能在Javascript的风格(至少不规则,有反向引用).我只是不知道任何可以让他们这样做的功能.
没有其他代码 - 表单允许输入单个正则表达式,该表达式根据页面上的测试字符串进行评估.我想,我可以尝试破解页面以打破正则表达式并进入原始JS,但这似乎并不符合这一挑战的精神.
大卫问,这里是测试字符串.较长的已被截断了字符数,但问题的题目是"平衡",并且是完整的那些肯定是支持的"匹配"列有平衡对的假说<
和>
,而"不是"一栏没有.
Match all of these…
<<<<<>><<>>><<... [62 chars]
<<<<<>><>><<><... [110 chars]
<<<<<>><>><>><... [102 chars]
<<<<<>><>>>><<... [88 chars]
<<<<<>>><<<>><... [58 chars]
<<<<<>>><<><>>... [152 chars]
<<<<<>>><<>><<... [42 chars]
<<<<<>>><>><<<>>>><<>>
<<<<<>>>><<<<>... [102 chars]
<<<<<>>>><<<><... [30 chars]
<<<<<>>>><><<<... [66 chars]
<<<<<>>>><><<<... [124 chars]
<<<<<>>>><>><<>>
<<<<><<>>><<<>... [34 chars]
<<<<>><<<>>>><... [92 chars]
<<<<>>><<<<>><>><<<>>>>>
<<<<>>><<<><<>>><><<>>>><<>>
<<<<>>><<><<<>... [84 chars]
<<<<>>>><<<><<... [52 chars]
<<<><<<>>>><<<... [50 chars]
<<<><<><>>>>
<<<><>><<<>>>>
<<<>><<<><<>>>... …
Run Code Online (Sandbox Code Playgroud) 以下代码无效.正如你在jsfiddle上看到的那样,我需要按列加总.出了什么问题?
<table id="sum_table" width="300" border="1">
<tr>
<td>Apple</td>
<td>Orange</td>
<td>Watermelon</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr>
<td class="rowDataSd">1</td>
<td class="rowDataSd">2</td>
<td class="rowDataSd">3</td>
</tr>
<tr class="totalColumn">
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
$(document).ready(function(){
$(".rowDataSd").each(function() {
newSum.call(this);
});
});
function newSum() {
var $table = $(this).closest('table');
var total = 0;
$(this).attr('class').match(/(\d+)/)[1];
$table.find('tr:not(.totalColumn) .rowDataSd').each(function() {
total += parseInt($(this).html());
});
$table.find('.totalColumn td:nth-child('')').html(total);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个应用程序,只要按下Shift键就会响应,无论当前哪个应用程序都有焦点.
我尝试使用SetWindowsHookEx()
和使用GetKeyboardState()
,但这两个只在应用程序的窗口具有焦点时才起作用.我需要它在全球范围内工作.
我该怎么做呢?
我想根据索引选择要放入哪个文件的数据.但是,我似乎陷入了以下困境.
我使用文件句柄数组创建了文件:
my @file_h;
my $file;
foreach $file (0..11)
{
$file_h[$file]= new IT::File ">seq.$file.fastq";
}
$file= index;
print $file_h[$file] "$record_r1[0]$record_r1[1]$record_r1[2]$record_r1[3]\n";
Run Code Online (Sandbox Code Playgroud)
但是,我在最后一行出于某种原因出错了.帮助任何人......?