我测试sys.getsize('')和sys.getsize(' ')在三种环境中,并在其中的两个sys.getsize('')给我51个字节(比第二个字节以上),而不是49个字节:
截图:
Win8 + Spyder + CPython 3.6:
Win8 + Spyder + IPython 3.6:
Win10(VPN远程)+ PyCharm + CPython 3.7:
首先编辑
我在Python.exe中进行了第二次测试而不是Spyder和PyCharm(这两个仍然显示51),一切似乎都很好.显然我没有专业知识来解决这个问题所以我会留给你们:)
Win10 + Python 3.7控制台与PyCharm使用相同的解释器:
Win8 + IPython 3.6 + Spyder使用相同的解释器:
我已经完成了类似的问题搜索,我对我应该做什么有一个模糊的想法:矢量化一切或使用apply()家庭.但我是R编程的初学者,上述两种方法都令人困惑.
这是我的源代码:
x<-rlnorm(100,0,1.6)
j=0
k=0
i=0
h=0
lambda<-rep(0,200)
sum1<-rep(0,200)
constjk=0
wj=0
wk=0
for (h in 1:200)
{
lambda[h]=2+h/12.5
N=ceiling(lambda[h]*max(x))
for (j in 0:N)
{
wj=(sum(x<=(j+1)/lambda[h])-sum(x<=j/lambda[h]))/100
for (k in 0:N)
{
constjk=dbinom(k, j + k, 0.5)
wk=(sum(x<=(k+1)/lambda[h])-sum(x<=k/lambda[h]))/100
sum1[h]=sum1[h]+(lambda[h]/2)*constjk*wk*wj
}
}
}
Run Code Online (Sandbox Code Playgroud)
让我解释一下.我想收集200个sum1值(这是第一个循环),并且对于每个sum1值,它是总和(lambda[h]/2)*constjk*wk*wj,因此是其他两个循环.最乏味的是N随h变化,所以我不知道如何对j循环和k循环进行矢量化.但是当然我可以使用lambda<-seq()和矢量化h循环N<-ceiling(),这是我能做的最好的.有没有办法进一步简化代码?
我很难理解递归和回溯,虽然我做了一些简单的练习(例如Fibonacci).所以请允许我在这里展示我的"脑力流":
我阅读了教科书并知道如果当前位置消除了将下一个女王放入下一栏的可能性,你可以使用回溯来移除前一个女王.所以这似乎很容易,我需要做的就是删除它,让程序决定下一个可能的地方.
过了一会儿,我发现程序在第6位女王停滞不前,所以我发现如果我简单地删除第5位女王,那么程序只需将其放回当前位置(即给出前4位女王,第5位女王总是落入同一位置地方,这并不奇怪).所以我认为我需要跟踪最后一位女王的位置.
这是我困惑的时候.如果我要跟踪的最后一个皇后的位置(这样,当我原路返回程序是不允许把女王到同一个地方),有两个潜在的问题:
a)假设我删除了第五位女王,我必须编写代码来决定其下一个可能的位置.这可以通过忽略其当前位置(在被移除之前)来解决,并继续在以下行中查找可能的位置.
b)我应该追踪所有以前的皇后吗?似乎是这样.让我们说实际上我必须删除不是一个女王,而是两个女王(甚至更多),我当然需要跟踪他们当前的所有位置.但这比它看起来要复杂得多.
http://www.geeksforgeeks.org/backtracking-set-3-n-queen-problem/
它让我感到非常惊讶,因为它非常简单而又有效!唯一的回溯部分是删除最后一个女王!所以问题是:以下代码如何确保当给出4个皇后的位置时,第5个皇后并不总是一次又一次地落入同一个地方?我认为我不明白的是你如何递归回溯(比如你需要删除更多的皇后).递归前进时我没有问题,但我怎样才能递归地向后移动?
/* A recursive utility function to solve N Queen problem */
bool solveNQUtil(int board[N][N], int col)
{
/* base case: If all queens are placed then return true */
if (col >= N)
return true;
/* Consider this column and try placing this queen in all rows
one by one */
for (int i = 0; i < N; i++)
{
/* Check if queen can be placed on board[i][col] */ …Run Code Online (Sandbox Code Playgroud) 这是我之前的帖子的延续.由于它已经关闭,我决定发一个新帖子.我删除了一半的代码,使其更具可读性.
我读到的一些帖子:
class cGraphics
{
public:
// Creator functions
std::unique_ptr<SDL_Window, decltype(&SDL_DestroyWindow)> Create_Window(int xWin, int yWin);
// ctor & dtor
cGraphics() : m_Window(nullptr, SDL_DestroyWindow) {}
cGraphics(int xWin, int yWin);
~cGraphics();
private:
std::unique_ptr<SDL_Window, decltype(&SDL_DestroyWindow)> m_Window;
};
cGraphics::cGraphics(int xWin, int yWin)
{
m_Window = std::move(Create_Window(xWin, yWin));
if (m_Window == nullptr)
{
throw "SDL_Window or SDL_Renderer not ready!";
}
}
cGraphics::~cGraphics()
{
IMG_Quit();
SDL_Quit();
}
std::unique_ptr<SDL_Window, decltype(&SDL_DestroyWindow)> cGraphics::Create_Window(int xWin, int yWin)
{
return std::unique_ptr<SDL_Window, decltype(&SDL_DestroyWindow)>(SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, xWin, yWin, SDL_WINDOW_SHOWN), …Run Code Online (Sandbox Code Playgroud) 结尾 更新结尾更新 2
我从这里阅读: 从熊猫数据框列中获取列表
当您将 Pandas DataFrame 列拉出时,它们就是 Pandas 系列
但是,在我的情况下,情况并非如此:
第一部分(构建 DataFrame 读取 json 抓取)因为它包含业务信息,我无法显示完整代码,但基本上它读取一行数据(存储在系列中)并附加到 DataFrame 的末尾。
dfToWrite = pandas.DataFrame(columns=[lsHeader]) # Empty with column headers
for row in jsAdtoolJSON['rows']:
lsRow = []
for col in row['row']:
lsRow.append((col['primary'])['value'])
dfRow = pandas.Series(lsRow, index = dfToWrite.columns)
dfToWrite = dfToWrite.append(dfRow, ignore_index = True)
Run Code Online (Sandbox Code Playgroud)
下一部分(检查类型):(请忽略函数的功能)
def CalcMA(df: pandas.DataFrame, target: str, period: int, maname: str):
print(type(df[target]))
Run Code Online (Sandbox Code Playgroud)
最后调用函数:(“Raw_Impressions”是列标题)
CalcMA(dfToWrite, "Raw_Impressions", 5, "ImpMA5")
Run Code Online (Sandbox Code Playgroud)
Python 控制台显示:
类'pandas.core.frame.DataFrame'
附加问题:如果不是系列(在这种情况下我可以使用tolist()),如何从 Dataframe 列中获取列表?
更新 1 …
我正在尝试将表列的最后 4 个字符放入数组并转储到 L 列。我使用数组是因为它更快:
Dim arrCard() As String
.Range("TableExport[CARD]").NumberFormat = "@"
arrCard = Right(.Range("TableExport[CARD]").Text, 4)
.Range("L2:L10000") = arrCard
Run Code Online (Sandbox Code Playgroud)
然后它说
类型不匹配
这没有意义,因为 CARD 列已经是文本。这是否意味着我不能在一个范围内使用 Right()?但是我确实看到很多示例都使用这种方法(除非它们不适用于表列)
我也试过:
Dim arrCard() As Variant
Dim cardnum As Integer
.Range("TableExport[CARD]").NumberFormat = "@"
arrCard = Right(.Range("TableExport[CARD]").Text, 4)
.Range("L2:L10000") = arrCard
Run Code Online (Sandbox Code Playgroud)
然后它在第 4 行抱怨类型不匹配。TBH 我不明白,这似乎不是什么要求。
在 C++ Primer 第五版中,它说:
c_str 返回的数组不保证无限期有效。
于是我做了一个测试:
// c_str exploration
std::string strTest = "This is a test";
const char* s1 = strTest.c_str();
strTest = "This is b test";
std::cout << s1 << std::endl;
Run Code Online (Sandbox Code Playgroud)
由于 s1 是一个指针,因此它肯定会显示新值。但是,当我将值更改为不同长度的字符串时,它通常会显示一些垃圾:
// c_str exploration
std::string strTest = "This is a test";
const char* s1 = strTest.c_str();
strTest = "This is b testsssssssssssssssssssssssssss";
std::cout << s1 << std::endl;
Run Code Online (Sandbox Code Playgroud)
我认为这是因为返回的 C String 已经固定了结束空字符的位置,所以当长度改变时,它会使所有内容无效。令我惊讶的是,有时即使我将字符串更改为新长度,它仍然有效:
// c_str exploration
std::string strTest = "This is a test";
const char* s1 = …Run Code Online (Sandbox Code Playgroud)