小编agh*_*ast的帖子

检查列表是否是子列表

我需要检查list1是否是list2的子列表(True;如果list2中与list1相同的每个整数与list1中的索引顺序相同)

def sublist(lst1,lst2):
    for i in range(len(lst1)):
        if lst1[i] not in lst2:
            return False
        for j in range(len(lst2)):
            if (lst1[j] in lst2) and (lst2.index(lst1[i+1]) > lst2.index(lst1[i])):
                return True
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我......为什么这不起作用?

python python-2.7 python-3.x

17
推荐指数
6
解决办法
3万
查看次数

为什么 Rust 的 .expect() 叫做 expect?

Rust.expect()是 Result/Option 空间中最令人惊讶的名字之一。虽然unwrap有道理——Result通过“解包”从 a 中获取一个值——但expect出奇地违反直觉(对我来说)。

由于 Rust 的大部分内容都受到函数式编程语言约定的启发,我一直假设这是“对默默无闻的奇怪敬意”的另一个例子,但是当我问鸭子时,它无法为我找到答案。

所以,我放弃了。为什么是.expect()Rust.unwrap_or_panic_with_this_message()函数的名称?这是对另一种功能语言中的功能的引用吗?它是 Tcl 的反手阴影(或补充)吗?Mozilla 熬夜太多,Espresso 太多的结果?

标准库中这个勇敢(但凶猛!)的小成员的词源是什么?

rust

17
推荐指数
1
解决办法
681
查看次数

类模板如何存储引用或值?

阅读有关通用引用的信息让我想知道:我如何构建一个类模板,以便在可能的情况下通过引用存储,或者如果必须的话通过值存储?

也就是说,我可以这样做吗?

template <class T>
class holder {
    T  obj_m;  // should be a reference if possible...
public:
    holder(T t) :obj_m { t } {}
}

auto 
hold_this(T && t) { return holder<T>(t); }
Run Code Online (Sandbox Code Playgroud)

除了当hold_this()被赋予一个左值的持有人将持有的引用,并给予当右值持有者将制作副本吗?

c++ templates c++17

16
推荐指数
1
解决办法
1532
查看次数

为什么``literal``鼓励在C++参数类型匹配中衰减为`const char*`?

我正在玩c ++ 14中的重载运算符,我尝试匹配两种类型的参数:any-old-const-char*和a-string-literal.

也就是说,我试图看看我是否可以区分:

const char * run_time;
Run Code Online (Sandbox Code Playgroud)

"compile time"
Run Code Online (Sandbox Code Playgroud)

我编写了下面的代码,如图所示,当我尝试span >> "literal"它时调用了该const char*函数.

当我#if 0退房手续的const char*版本,模板版本被调用就好了.

如果我更改模板版本以获取rvalue-reference(&&)参数literal,则不会编译.

如果我添加const char (&literal)[]非模板版本,则该const char*版本仍然是首选.删除const-char*版本,首选模板版本.

你能解释一下吗?特别是:

  1. 为什么const char*首选const char (&)[N]
  2. 为什么const char (&)[N]首选const char (&)[](非模板)?
  3. 为什么const char (&&)[N]无法编译?
  4. 有没有"正确的方法"来捕获文字字符串?

谢谢.

#include <iostream>
using namespace std;

#include <gsl/gsl>
#include <type_name.h++>

template<unsigned N>
auto
operator>>(gsl::span<const char*,-1>& spn, const char (&literal)[N]) …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

13
推荐指数
1
解决办法
1220
查看次数

为什么std :: find_if(first,last,p)不能通过引用获取谓词?

我正在查看std::find_ifcppreference.com上的各种签名,我注意到采用谓词函数的风格似乎是按值接受它:

template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last,
             UnaryPredicate p );
Run Code Online (Sandbox Code Playgroud)

如果我正确理解它们,带有捕获变量的lambdas会为其数据的引用或副本分配存储空间,因此可能会出现"按值传递"意味着会为调用复制捕获数据的副本.

另一方面,对于函数指针和其他直接可寻址的东西,如果直接传递函数指针,而不是通过引用指针(指向指针),性能应该更好.

首先,这是正确的吗?UnaryPredicate以上是否是一个按值参数?

第二,我对传递lambdas的理解是否正确?

第三,在这种情况下,是否有理由通过价值而非参照?更重要的是,是不是有一些足够模糊的语法(hello,通用引用)可以让编译器做任何想要获得最大性能的东西?

c++ pass-by-value stl-algorithm c++17

10
推荐指数
2
解决办法
765
查看次数

如何在std :: map中try_emplace POD结构?

我有一张int -> { basic types }我需要存储的地图.

我想简单地创建一个struct { int f1, int f2; };并直接存储值,在商店中就地构建结构.我不希望有任何重复的键,所以try_emplace看起来很理想.

我写了这段代码:

// mcve.cpp
#include <map>
#include <string>

struct various { int f1, f2; };
using map_t = std::map<int, various>;

void
example()
{
    map_t dict;

    //dict.try_emplace(1, 2);
    dict.try_emplace(1, 1, 2);
    //dict.try_emplace(1, {1, 2});
}
Run Code Online (Sandbox Code Playgroud)

但这些选项都不起作用.

使用clang ++我得到这样的错误.(版本:clang版本5.0.1(标签/ RELEASE_501/final))

/opt/local/libexec/llvm-5.0/include/c++/v1/tuple:1365:7: error: no matching
      constructor for initialization of 'various'
      second(_VSTD::forward<_Args2>(_VSTD::get<_I2>(__second_args))...)
      ^      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

### ... many lines ...

mcve.cpp:14:7: note: in instantiation of …
Run Code Online (Sandbox Code Playgroud)

c++ struct stdmap emplace c++17

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

我可以在线抑制 mypy 错误吗?

我最近犯了在启用语法检查的情况下打开$PYTHONSTARTUP文件的错误mypy。结果,我开始收到此错误:

startup.py|79 col 2 error| Incompatible types in assignment (expression has type "HistoryPrompt", variable has type "str")
Run Code Online (Sandbox Code Playgroud)

在第 79 行:

sys.ps1 = HistoryPrompt()
Run Code Online (Sandbox Code Playgroud)

我立刻想,“天哪,mypy!你完全正确!然而,这正是我想要做的,所以你也错了!”

我去看看模块是否有某种“存根” sys,但找不到任何东西。我猜这mypy是通过查看存储在变量中的值来确定类型(默认为“>>>”,即 a str)。

在现实中,当然,类型需要是不存在的typing.Stringifiable,表明一个对象将响应str(x)

到了那个死胡同后,我开始寻找一种方法mypy来抑制错误。这么多其他工具支持# noqa: xxx,我想一定有什么,对吧?

错误的。或者至少,我在我的版本中找不到它,即:mypy 0.670

所以,我设计了一个黑客巧妙的变通办法:

import typing

# Work around mypy error: Incompatible types in assignment
suppress_mypy_error: typing.Any = HistoryPrompt()
sys.ps1 = suppress_mypy_error
Run Code Online (Sandbox Code Playgroud)

我的问题是:没有办法在线(最好)mypy.ini …

python python-3.x mypy

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

为什么clang ++会报告一个结构化绑定,其中"在初始化期间存储到'...'的值永远不会被读取"?

我有以下测试用例:

testcase("[room] exits") {
    auto [center, east, north, south, west] = make_test_rooms();

    check_eq(center->east(), east);
    check_eq(center->north(), north);
    check_eq(center->south(), south);
    check_eq(center->west(), west + 1);
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,clang ++(clang版本5.0.1(标签/ RELEASE_501/final))报告:

room.cpp:52:7: note: Value stored to '[center, east, north, south, west]' during its initialization is never read
Run Code Online (Sandbox Code Playgroud)

在上面的代码,testcasecheck_eq用于定义的宏的文档测试单元测试包展开后DOCTEST_TEST_CASE()(某种自注册变量+函数对)和DOCTEST_CHECK_EQ(基本上,"断言== B"魔术带处理).

我知道这段代码正在执行,因为这west + 1是故意引入的错误.当我运行我的测试时,我得到一个像这样的失败消息:

===============================================================================
/.../room.cpp(51)
TEST CASE:  [room] exits

/.../room.cpp(57) ERROR!
  CHECK_EQ( center->west(), west + 1 )
with expansion:
  CHECK_EQ( 0x00007fd6f1d011a0, 0x00007fd6f1d011f8 )
Run Code Online (Sandbox Code Playgroud)

据我所见,我使用结构化绑定中的所有值: …

c++ clang++ c++17 structured-bindings

5
推荐指数
1
解决办法
449
查看次数

如何将类型或值传递给 _Generic()

内置函数sizeof可以采用类型或表达式,并将返回适当的值。

我想构建一个使用_Generic()表达式来做类似事情的宏。特别是,我希望能够传递类型名称或值作为参数,就像sizeof.

作为一个简单的例子,我可以做这样的事情:

#define F(x)  _Generic((x)+0, int: 1, long: 2)
Run Code Online (Sandbox Code Playgroud)

这是可行的,因为(x)+0可以是算术表达式或类型转换。

  • (1)+0 -> 1+0 -> 1 -> 整数:1
  • (长)+0 -> 0L -> 长:2

但当类型为 时,这不起作用struct Foo

我可以使用带有大括号的复合文字语法:(x){0}但这对于文字值失败:

  • (长){0} - 有效
  • (结构 Foo){0} - 有效
  • (1){0} - 没那么多。:-(

是否有一些扭曲的 C 语法恐怖允许在 - 表达式中使用类型名称或表达式_Generic

c macros

5
推荐指数
1
解决办法
99
查看次数

为什么我的功能总是返回1?

我正在编写一个函数,用于检查"noughts and crosses"游戏中是否有赢家,或者"连续三次".

游戏的工作原理是首先在命令提示符中绘制3 x 3个方块.然后用户在方块之间移动光标,然后按Enter键以放置"X".下一个选定的方格中放置一个"O",然后再放一个"X",依此类推.在第5轮(第一个可能的转弯可能有胜利者)之后,该程序检查在每个回合之后是否有赢家,如果在9转之后没有找到(当所有方块都有某些东西时)该程序宣布平局.

但是,我为检查获胜者而编写的函数在被调用时总是返回1,这意味着有一个胜利者(更具体地说是X,因为那是最后一次移动的那个).因此,无论方块包含什么,游戏都在第5轮结束.

这是我的代码:

int control(char p[3][3]) {
    int i;
    for (i = 0; i <= 3; i++)    //Checks if any of the horizontals have 3 of the same markers in a row
        if (p[i][1] == p[i][2] && p[i][2] == p[i][3]) 
            return 1;

    for (i = 0; i <= 3; i++)    //Checks if any of the vertical columns have 3 of the same markers
        if (p[1][i] == p[2][i] && p[2][i] == p[3][i])
            return 1;
        else if …
Run Code Online (Sandbox Code Playgroud)

c for-loop if-statement function return-value

0
推荐指数
1
解决办法
150
查看次数