小编Joh*_*man的帖子

搜索元素的有效方法

最近我接受了采访,他们在那里问我一个" 搜索 "问题.
问题是:

假设有的(正)的整数,其中的每个元素是一个数组+1-1比其相邻的元件.

例:

array = [4,5,6,5,4,3,2,3,4,5,6,7,8];
Run Code Online (Sandbox Code Playgroud)

现在搜索7并返回其位置.

我给出了这个答案:

将值存储在临时数组中,对它们进行排序,然后应用二进制搜索.

如果找到该元素,则返回其在临时数组中的位置.
(如果数字出现两次,则返回第一次出现)

但是,他们似乎并不满意这个答案.

什么是正确的答案?

c arrays sorting algorithm search

88
推荐指数
4
解决办法
5121
查看次数

确定变量的完整类型

通过完整类型的变量,我指的是您在即时窗口中获得的信息类型:

在此输入图像描述

我想使用VBA动态确定类型信息.该函数TypeName()不能做我想要的,因为它返回变量的子类型,并且不区分例如保持范围的变量变量,保持范围的对象变量和保持范围的范围变量.

作为初步步骤,我编写了一个函数,用于检测变量是否传递给它.它的工作原理是利用传递引用语义.代码使用其参数执行的操作只能通过变量完成,因此如果传递的变量实际上不是变量,则会触发错误:

Function IsVariant(var As Variant) As Boolean
    Dim temp As Variant
    Dim isVar As Boolean

    If IsObject(var) Then
        Set temp = var
    Else
        temp = var
    End If

    On Error Resume Next
        Set var = New Collection
        var = "test"
        If Err.Number > 0 Then
            isVar = False
        Else
            isVar = True
        End If
    On Error GoTo 0

    If IsObject(temp) Then
        Set var = temp
    Else
        var = temp
    End If
    IsVariant …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

61
推荐指数
2
解决办法
1万
查看次数

为什么这不是类型不匹配?

我回答了这个问题,显然是对OP的满意,但仍然发现他们的问题令人费解.他们的问题涉及一个表达式,其中工作簿对象与字符串连接,触发Run-time Error '438': Object doesn't support this property or method.只需键入即可重现此类错误

?"Hello, " & ThisWorkbook
Run Code Online (Sandbox Code Playgroud)

在立即窗口中.

我的问题是-为什么会发生这种提高错误,而不是错误13 -类型不匹配?一个合理的猜测是VBA尝试查找工作簿对象的默认属性,并且默认属性不存在.但是,如果是这样,我希望它是Microsoft的Visual Basic 6.0错误代码列表中的以下错误:Automation object doesn't have a default value (Error 443).

它主要是学术兴趣,但如果将没有默认属性的对象与字符串连接的结果总是错误438,这是触发错误438的唯一方法,而不是在将字符串与对象连接时可能出现的另一个错误,然后可能会使用以下代码:

Function HasDefault(O As Variant) As Boolean
    Dim i As Long
    If Not IsObject(O) Then Exit Function
    On Error Resume Next
    i = Len("Hello, " & O)
    If Err.Number = 438 Then
        HasDefault = False
    Else
        HasDefault = True
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

我已经在各种对象上对此进行了测试,对于那些我在其上测试过_Default …

excel vba excel-vba

18
推荐指数
1
解决办法
409
查看次数

使用"df"作为数据帧的名称是否安全?

一个常见的习语(可以在书籍,教程和许多Stack Overflow问题中找到)df用作数据帧的一种丢弃标识符.我已经完成了数百次看似没有任何不良影响,但后来遇到了以下代码:

library(tree)
df <- droplevels(iris[1:100,c(1,2,5)])
tr <- tree(Species ~ ., data = df)
plot(tr)
text(tr)
partition.tree(tr)
Run Code Online (Sandbox Code Playgroud)

这给出以下错误消息:

Error in as.data.frame.default(data, optional = TRUE) : 
  cannot coerce class ""function"" to a data.frame
Run Code Online (Sandbox Code Playgroud)

我通过反复试验发现,如果我简单地替换df上面df2的代码,代码就会按预期工作.确实,这df F分布的密度函数的名称,但这似乎与此无关.这是一个错误的tree包,还是一个重要的警示故事,其道德是我应该避免使用df作为数据帧的名称,因为这样做引入了名称冲突?

r

9
推荐指数
1
解决办法
166
查看次数

C打印出第一百万斐波纳契数

我正在尝试编写C代码,它将打印出前100万个Fibonacci数字.

实际问题是我想得到10位F(1,000,000)

我理解序列是如何工作的,以及如何编写代码来实现它,但是F(1,000,000)非常大,我正在努力寻找一种方法来表示它.

这是我正在使用的代码:

#include<stdio.h>

int main()
{
   unsigned long long n, first = 0, second = 1, next, c;

   printf("Enter the number of terms\n");
   scanf("%d",&n);

   printf("First %d terms of Fibonacci series are :-\n",n);

   for ( c = 0 ; c < n ; c++ )
   {
      if ( c <= 1 )
         next = c;
      else
      {
         next = first + second;
         first = second;
         second = next;
      }
      printf("%d\n",next);
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在long …

c fibonacci

7
推荐指数
3
解决办法
2万
查看次数

Pandas 将数字转换为字符串 - 意外结果

似乎没有办法将输入表(从 html/xls/etc 文件)获取到 DataFrame 对象,因为它是 1 对 1 的,而没有 Pandas 内部应用的任何字段转换。

假设以下 html 表以 .xls 文件的扩展名保存,我们如何使用 DataFrame 对象在 Python 内存中获得该表的相同表示?

“test_file.xls”的内容:

<body>
    <table>
        <thead>
            <tr>
                <th class="tabHead" x:autofilter="all">Number</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="tDetail">1.320,00</td>
            </tr>
            <tr>
                <td class="tDetail">600,00</td>
            </tr>
        </tbody>
    </table>
</body>
Run Code Online (Sandbox Code Playgroud)

(1)直接读取文件

处理代码:

import pandas

df = pandas.read_html('test_file.xls')
print(df[0])
print(df[0].dtypes)
Run Code Online (Sandbox Code Playgroud)

输出:

     Number
0      1.32
1  60000.00

Number    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,这些数字是通过一些预定义的逻辑转换为 float64 的。我认为这个逻辑包括语言环境设置,也许熊猫内部的一些规则等。直接指定字符串转换器不允许获取初始值。

(2) 应用str函数作为每个维度的转换器

处理代码:

converters = {column_name: str for column_name in df[0].dtypes.index}
df = pandas.read_html(f, converters = …
Run Code Online (Sandbox Code Playgroud)

python file-conversion dataframe pandas

7
推荐指数
1
解决办法
1078
查看次数

在Excel公式中查找所有使用的参考

以下是Excel中设置的示例,

[column1] [column2]

A1  =C3-C5

A2  =((C4-C6)/C6)

A3  =C4*C3

A4  =C6/C7

A5  =C6*C4*C3
Run Code Online (Sandbox Code Playgroud)

我需要在公式中提取使用过的引用

例如,

for "A1", I simply need to get the C3 and C5.
for A2, I need to get the C4 and C6.
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

6
推荐指数
2
解决办法
5700
查看次数

将 Successor ML 与 SML/NJ 结合使用

当我看到 SML/NJ 最近在110.79 版本中进行了一些重大更改时,我感到惊喜,这是朝着称为 Successor ML 的方向发展的一部分。这似乎是 SML/NJ 和 MLton 之间的合作项目,预示着 SML 的未来。

但是,当我尝试使用一些新功能时,我似乎遇到了一个奇怪的错误(在 64 位 Windows 7 上)。为了尝试一下,我在一个名为的文件中写了以下内容sml_successor_test.sml

Control.succML := true;
val n = 123_456;
print (Int.toString n);
Run Code Online (Sandbox Code Playgroud)

当我尝试使用use "C:\Programs\sml_successor_test.sml";编译器将它加载到 REPL中时,在​​文件的第二行(它使用应该启用的新型数字文字)。但是——当我立即运行与use以前完全相同的命令时——它起作用了。

如果首先Control.succML := true;在 REPL 中使用,然后用于use加载文件(从文件中删除该行后),它确实可以工作。另一方面,如果我只是启动 SML,启用succML,然后val n = 123_456;直接在 REPL 中进行分配,它第一次失败但随后工作。

总而言之——在Control.succML := true评估和生效之间似乎存在一个奇怪的滞后,这种滞后发生在某些情况下而不是其他情况下。知道这背后是什么以及任何解决方法吗?

sml smlnj

6
推荐指数
1
解决办法
263
查看次数

Mandelbrot设置显示不正确

这是我尝试使用Pygame模块对Python 3.5中的Mandelbrot集进行编程.

import math, pygame
pygame.init()

def mapMandelbrot(c,r,dim,xRange,yRange):
    x = (dim-c)/dim
    y = (dim-r)/dim
    #print([x,y])
    x = x*(xRange[1]-xRange[0])
    y = y*(yRange[1]-yRange[0])
    x = xRange[0] + x
    y = yRange[0] + y
    return [x,y]

def checkDrawBox(surface):
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            pygame.quit()
        elif i.type == pygame.MOUSEBUTTONDOWN:
            startXY = pygame.mouse.get_pos()
            boxExit = False
            while boxExit == False:
                for event in pygame.event.get():
                    if event.type == pygame.MOUSEBUTTONUP:
                        boxExit = True
                if boxExit == True:
                    return [startXY,pygame.mouse.get_pos()]
                pygame.draw.rect(surface,[255,0,0],[startXY,[pygame.mouse.get_pos()[0]-startXY[0],pygame.mouse.get_pos()[1]-startXY[1]]],1)
                pygame.display.update()

def setup():
    dimensions …
Run Code Online (Sandbox Code Playgroud)

python mandelbrot python-3.x

6
推荐指数
1
解决办法
175
查看次数

如何在R中设置C堆栈的大小?

我正在尝试使用R中spread()tidyr包中的函数来处理具有大约300万个观测值的数据帧.它返回以下错误消息:

Error : C stack usage  26498106 is too close to the limit
Run Code Online (Sandbox Code Playgroud)

当我跑步时Cstack_info(),它告诉我

> Cstack_info()
      size    current  direction eval_depth 
   7969177      15272          1          2 
Run Code Online (Sandbox Code Playgroud)

根据这个问题的答案中的建议,我尝试通过ulimit -s 32768在终端窗口中运行并从终端打开Rstudio来增加堆栈大小.但是,当我尝试这个时,输出Cstack_info()没有改变,当我运行我的代码时,我收到相同的错误消息.继同一个早期问题的另一个答案后,我尝试更新R和Rstudio,也无济于事.我在这做错了什么?

我在mac os x 10.12.2上运行R 3.3,内存为16 GB.

r ulimit

6
推荐指数
1
解决办法
2342
查看次数