我必须解析一个如下所示的XML文档:
<?xml version="1.0" encoding="UTF-8" ?>
<m:OASISReport xmlns:m="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd">
<m:MessagePayload>
<m:RTO>
<m:name>CAISO</m:name>
<m:REPORT_ITEM>
<m:REPORT_HEADER>
<m:SYSTEM>OASIS</m:SYSTEM>
<m:TZ>PPT</m:TZ>
<m:REPORT>AS_RESULTS</m:REPORT>
<m:MKT_TYPE>HASP</m:MKT_TYPE>
<m:UOM>MW</m:UOM>
<m:INTERVAL>ENDING</m:INTERVAL>
<m:SEC_PER_INTERVAL>3600</m:SEC_PER_INTERVAL>
</m:REPORT_HEADER>
<m:REPORT_DATA>
<m:DATA_ITEM>NS_PROC_MW</m:DATA_ITEM>
<m:RESOURCE_NAME>AS_SP26_EXP</m:RESOURCE_NAME>
<m:OPR_DATE>2010-11-17</m:OPR_DATE>
<m:INTERVAL_NUM>1</m:INTERVAL_NUM>
<m:VALUE>0</m:VALUE>
</m:REPORT_DATA>
Run Code Online (Sandbox Code Playgroud)
问题是名称空间"http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd"有时可能会有所不同.我想完全忽略它,只是从标记MessagePayload下游获取我的数据.
我到目前为止使用的代码是:
String[] namespaces = new String[1];
String[] namespaceAliases = new String[1];
namespaceAliases[0] = "ns0";
namespaces[0] = "http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd";
File inputFile = new File(inputFileName);
Map namespaceURIs = new HashMap();
// This query will return all of the ASR records.
String xPathExpression = "/ns0:OASISReport
/ns0:MessagePayload
/ns0:RTO
/ns0:REPORT_ITEM
/ns0:REPORT_DATA";
xPathExpression += "|/ns0:OASISReport
/ns0:MessagePayload …Run Code Online (Sandbox Code Playgroud) 我在这里找到了*C++结构化绑定的原始提议.它提出了一种轻松绑定多个返回值的方法,即:
auto {a, b} = minmax(data);
Run Code Online (Sandbox Code Playgroud)
但现在我看到每个人都指向C++ 17/C++ 1z提议语法
auto [a, b] = minmax(data);
Run Code Online (Sandbox Code Playgroud)
既然我已经学会了"列表被编写{like,this}",那么会出现一个新的列表语法?为什么?花括号有什么问题?
我有这句话:
def Ciudad(prob):
numero = random.random()
ciudad = prob.keys()[0]
for i in prob.keys():
if(numero > prob[i]):
if(prob[i] > prob[ciudad]):
ciudad = i
else:
if(prob[i] > prob[ciudad]):
ciudad = i
return ciudad
Run Code Online (Sandbox Code Playgroud)
但是当我调用它时,这个错误弹出:
TypeError: 'dict_keys' object does not support indexing
Run Code Online (Sandbox Code Playgroud)
这是版本问题吗?我正在使用Python 3.3.2
我正在编写一个getch()用于扫描箭头键的程序.到目前为止我的代码是:
switch(getch()) {
case 65: // key up
break;
case 66: // key down
break;
case 67: // key right
break;
case 68: // key left
break;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我按下'A','B','C'或'D'代码也将执行,因为65是十进制代码'A',等等.
有没有办法检查箭头键而不打电话给别人?
谢谢!
在他的一个主题演讲中,Andrei Alexandrescu建议,在64位平台上,使用32位数组索引比使用原始指针更快:
第16页:http://www.slideshare.net/andreialexandrescu1/three-optimization-tips-for-c-15708507
在他的Facebook帐户上,他更精确,并说:"更喜欢数组索引到指针(这个似乎每十年逆转一次)."
我已经尝试了许多方法来找到差异,但我还没有设法构建任何显示这种差异的程序.知道安德烈,我不会感到惊讶,差异不超过百分之几,但如果有人找到这样的例子,我会很高兴.
这是我做过的测试.我选择n = 5000,足够大以获得合适的时序并且足够小以使一切都适合L1缓存.我循环了几次,以便CPU频率上升.
#include <iostream>
#include <chrono>
int main(int argc, const char* argv[]) {
const int n{5000};
int* p{new int[n]};
// Warm up the cache
for (int i{0}; i < n; i++) {
p[i] += 1;
}
for (int j{0}; j < 5; j++) {
{
auto start_pointer = std::chrono::high_resolution_clock::now();
for (int* q{p}; q != p + n; ++q) {
++(*q);
}
auto end_pointer = std::chrono::high_resolution_clock::now();
auto time_pointer = std::chrono::duration_cast<std::chrono::nanoseconds>(
end_pointer - …Run Code Online (Sandbox Code Playgroud) 请参阅以下示例:
struct Foo {
int a;
int &b = a;
};
Run Code Online (Sandbox Code Playgroud)
如果错过了优化sizeof(Foo)!=sizeof(int)吗?
我的意思是,编译器可以b从其始终引用的结构中删除它a吗?
有什么阻止编译器进行这种转换的吗?
(请注意,struct Foo看起来是这样。没有构造函数,等等。但是您可以在周围添加任何内容Foo,这表明该优化将违反标准。)
有没有人知道为什么unary(*)运算符不能用在涉及iterators/lists/tuples的表达式中的原因?
为什么它只限于功能拆包?或者我认为错了?
例如:
>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
为什么不是*运营商:
[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
而当*操作符与函数调用一起使用时,它会扩展:
f(*[4, 5, 6]) is equivalent to f(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
使用列表时+和*使用列表时之间存在相似性,但在使用其他类型扩展列表时则不相似.
例如:
# This works
gen = (x for x in range(10))
def hello(*args):
print args
hello(*gen)
# but this does not work
[] + gen
TypeError: can only concatenate …Run Code Online (Sandbox Code Playgroud) python argument-unpacking python-2.7 iterable-unpacking pep448
我最近一直在学习python 3,我无法得到任何涉及字符串插值(格式化)的例子.
In [1]: state = "Washington"
In [2]: state
Out[2]: 'Washington'
In [3]: my_message = f"I live in {state}"
File "<ipython-input-3-d004dd9e0255>", line 1
my_message = f"I live in {state}"
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我认为我的机器默认为python 2,但快速检查显示:
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
Type "copyright", "credits" or "license" for more information.
IPython 5.2.2 -- An enhanced Interactive Python.
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 16.04:
python3 --version
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)
我只是忽略了基本语法?我在同学的几台计算机上运行相同的命令,似乎执行得很好.
我在网上找到了这个代码:
def merge(left, right):
result = []
i ,j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
def mergesort(list):
if len(list) < 2:
return list
middle = len(list) / 2
left = mergesort(list[:middle])
right = mergesort(list[middle:])
return merge(left, right)
Run Code Online (Sandbox Code Playgroud)
当我运行它时它100%工作.我只是没有真正了解合并排序的工作原理或递归函数如何正确地排序左右两种.
我们知道stdin默认情况下是缓冲输入; 证据就是使用"保留数据"的任何机制stdin,例如scanf():
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./a.out
你好,
你好,左边是10
10 当然是换行...
我一直很好奇,有没有办法"偷看" stdin缓冲区而不删除那里可能存在的东西?
编辑
一个更好的例子可能是:
scanf("%9[^.]", c);
Run Code Online (Sandbox Code Playgroud)
输入"at.ct"后,现在我还有"data"(ct\n)stdin,而不仅仅是换行符.
python ×4
c++ ×3
c ×2
python-3.x ×2
algorithm ×1
arrays ×1
arrow-keys ×1
buffer ×1
c++17 ×1
character ×1
decimal ×1
dictionary ×1
dictview ×1
getch ×1
mergesort ×1
namespaces ×1
peek ×1
pep448 ×1
performance ×1
pointers ×1
python-2.7 ×1
reference ×1
sorting ×1
stdin ×1
struct ×1
ubuntu-16.04 ×1
xml ×1
xpath ×1