tuples 相关问题

在编程中,元组是简单的*产品类型*,表示有序的类型集合。

EnumeratedSequence 如何最终成为元组?

在下面的代码中,即使 enumareted() 返回一个 EnumeratedSequence 对象,(k, v) 也是一个元组。是编译器的魔法将其变成了元组吗?如何通过代码转换来实现这一目标

回答 2 投票 0

从元组列表中获取最小唯一元组对

考虑以下元组列表: 交易 = [ ('英镑.美元', '2022-04-29'), ('雪', '2022-04-26'), ('商店', '2022-04-21'), ('英镑.美元', '2022-04-27'), ('MSFT', '2022-04-1...

回答 1 投票 0

比较列表中的元组元素

我有两个包含质心坐标元组的列表...... 当前质心 = [(924, 849), (734, 974), (360, 778), (400, 710), (963, 1067), (839, 440), (899, 88)] 先验质心 = [(1096, 837)...

回答 1 投票 0

将 Dataframe 转换为 numpy 数组的命名元组

我需要将 pandas 数据帧转换为 numpy 数组的元组。我的代码就像, 将 pandas 导入为 pd 数据 = {'类':[10., 11., 9., 8.], '年龄':[27., 24., 22., 32.], “马克”:[76., 56...

回答 1 投票 0

获取元组元素类型的索引?

如果我有一个具有不同元素类型的元组,例如 std::元组 以及如何获取元素类型的索引? 模板 结构索引 { 枚举 {va...

回答 8 投票 0

元组符合Comparable吗?

Swift 中的元组似乎符合 Comparable,因为我得到了这些结果: 打印 ( (3,0) < (2,10000) ) // false print ( (0,0,5) < (0,0,7) ) // true It seems to do a left-right member-by-...

回答 1 投票 0

寻找更好的方式来编写“凭据验证程序”

我刚刚开始学习Python(使用Python 3.12.1) 我想编写一段代码,使用存储在元组中的一堆凭据来验证用户输入的用户名和密码。 我使用每个 tupl...

回答 1 投票 0

将元组转换为日期时间

我知道这个问题已经被问过很多次了,但是,我似乎找不到适合我的。 我使用请求得到了以下文本。 数据=响应.文本 var racePostTime = ["","...

回答 1 投票 0

忽略Python元组的一部分

如果我有一个元组,例如 (1,2,3,4) 并且我想将 1 和 3 分配给变量 a 和 b 我显然可以说 myTuple = (1,2,3,4) a = myTuple[0] b = myTuple[2] 或者类似的东西 (a,_,b,_) = myTuple ...

回答 4 投票 0

一个std::获取它们的模板

为了在其他模板中使用,我希望有一个像 std::get 这样的函数用于元组,当 get 调用无效时返回默认类型的实例;那种 模板 为了在其他模板中使用,我想要一个像 std::get 这样的函数用于元组,当 get 调用无效时返回默认类型的实例;那种 template<size_t I, typename T> auto get_or(T const& t) { // Pseudocode return ("if std::get<I>(t) is valid") ? std::get<I>(t) : std::monostate{}; } 但是我失败了,我想知道这是否是由于我缺乏 C++ 概念的经验,或者可能是编译器中的错误(Visual Studio 2022 版本 17.8.4),或者可能根本不可能。 这是我尝试过的: 我定义了一个类型特征和一个概念来告诉我 T 是否是一个元组: template<typename T> struct is_tuple : std::false_type {}; template<typename... Ts> struct is_tuple<std::tuple<Ts...>> : std::true_type {}; namespace test_concepts { template<typename T> concept is_tuple = requires { ::is_tuple<T>::value; }; } 接下来,我想回答这个问题“给定一个元组 t 和一个编译时常量 I,std::get<I>(t) 是否有效? template<size_t I, typename T> constexpr bool can_get (T const&) { return false; } template<size_t I, typename T> requires test_concepts::is_tuple<T> constexpr bool can_get(T const& t) { return (I < std::tuple_size_v<std::remove_cvref_t<decltype(t)>>); } namespace test_concepts { template<size_t I, typename T> concept can_get = requires(T t) { ::can_get<I>(t); }; } // Test code std::tuple<> t0; std::tuple<int> t1; std::tuple<double, float> t2; static_assert(!can_get<0>(t0)); static_assert(!can_get<1>(t0)); static_assert(!can_get<2>(t0)); static_assert( can_get<0>(t1)); static_assert(!can_get<1>(t1)); static_assert(!can_get<2>(t1)); static_assert( can_get<0>(t2)); static_assert( can_get<1>(t2)); static_assert(!can_get<2>(t2)); 这有效。但是,当我执行最后一步时,我收到编译时错误。 template<size_t I, typename T> auto get_or(T const& t) { return std::monostate{}; } template<size_t I, typename T> requires test_concepts::can_get<I, T> auto get_or(T const& t) { return std::get<I>(t); } // Test code std::tuple<> t0; std::tuple<int> t1; auto x00 = get_or<0>(t0); // I expect x00 to be of type std::monostate, but instead this error is displayed: // error C2338: static_assert failed: 'tuple index out of bounds' auto x10 = get_or<0>(t1); // Context help shows that x10 is of type int as expected auto x11 = get_or<1>(t1); // error C2338 again for x11 有什么想法吗? - 谢谢! 您滥用了 requires 子句。 requires子句仅检查表达式的有效性,而不实际评估它,因此您的概念始终得到满足。 您可以使用嵌套的 requires 来计算表达式,例如 template<typename T> concept is_tuple = requires { requires ::is_tuple<T>::value; }; 或者更简单 template<typename T> concept is_tuple = ::is_tuple<T>::value; test_concepts::can_get也是如此。 感谢评论和答案的贡献者,我成功创建了一个可行的解决方案。不再需要 is_tuple 模板,我将 get_or 重命名为 get_or_default,因为它现在有另一个默认类型的参数。 #include <tuple> #include <xutility> #pragma region can_get template<size_t I, typename T> struct can_get : std::false_type {}; template<size_t I, typename T> requires requires { std::tuple_size<T>::value; } && (I < std::tuple_size<T>::value) struct can_get<I, T> : std::true_type {}; namespace test_concepts { template<size_t I, typename T> concept can_get = ::can_get<I, T>::value; } #pragma region can_get #pragma region get_or_default template<size_t I, typename DEFAULT = std::monostate, typename T> auto get_or_default(T const& tpl) { return DEFAULT{}; } template<size_t I, typename DEFAULT = std::monostate, typename T> requires test_concepts::can_get<I, T> auto get_or_default(T const& tpl) { using std::get; return get<I>(tpl); } #pragma endregion get_or_default int main() { std::tuple<> t0; std::tuple<int> t1; std::tuple<double, float> t2; static_assert(!can_get<0, int>::value); // 'int' is not tuple-like, tuple_size<int> is not defined static_assert(!can_get<0, decltype(t0)>::value); static_assert(!can_get<1, decltype(t0)>::value); static_assert(!can_get<2, decltype(t0)>::value); static_assert( can_get<0, decltype(t1)>::value); static_assert(!can_get<1, decltype(t1)>::value); static_assert(!can_get<2, decltype(t1)>::value); static_assert( can_get<0, decltype(t2)>::value); static_assert( can_get<1, decltype(t2)>::value); static_assert(!can_get<2, decltype(t2)>::value); static_assert(!can_get<0, std::tuple< >>::value); static_assert( can_get<0, std::tuple<int>>::value); auto x00 = get_or_default<0, int >(t0); static_assert(std::is_same_v<decltype(x00), int >); auto x10 = get_or_default<0, void*>(t1); static_assert(std::is_same_v<decltype(x10), int >); auto x11 = get_or_default<1, void*>(t1); static_assert(std::is_same_v<decltype(x11), void* >); auto x20 = get_or_default<0 >(t2); static_assert(std::is_same_v<decltype(x20), double >); auto x21 = get_or_default<1 >(t2); static_assert(std::is_same_v<decltype(x21), float >); auto x22 = get_or_default<2 >(t2); static_assert(std::is_same_v<decltype(x22), std::monostate>); auto xxx = get_or_default<0, nullptr_t>("hi"); static_assert(std::is_same_v<decltype(xxx), nullptr_t >); // not tuple-like return 0; } 你的伪代码 return ("if std::get<I>(t) is valid") ? std::get<I>(t) : std::monostate{}; 将是: template <size_t I, typename Tuple> constexpr auto get_or(Tuple const& t) { if constexpr (requires { std::get<I>(t); }) { // Hard error :-( return std::get<I>(t); } else { return std::monostate{}; } } 不幸的是,std::get对SFINAE不友好,因此会产生硬错误,而不是使这个概念失败。 然后您可以自己检查前提条件: template <size_t I, typename Tuple> constexpr auto get_or(Tuple const& t) { if constexpr (I < std::tuple_size_v<Tuple>) { return std::get<I>(t); } else { return std::monostate{}; } } 演示

回答 3 投票 0

std::make_tuple 不进行引用

我一直在尝试将 std::tuple 与参考文献结合起来: #包括 #包括 int main() { 整数a,b; std::tuple 测试(a,b); ...

回答 6 投票 0

需要帮助在Python中组合元组列表的相同元素

我有一个来自数据库的列表,该列表返回两天内的棒球统计信息。 假设我在一个元组列表中有这 3 项: (《无名氏》,2, 3) (“

回答 1 投票 0

命名 Action<T> 参数? (单值元组?)

因此,如果我想在回调中包含多个参数,我可以使用值元组为它们命名(用于上下文),同时仍然使用通用的 Action 委托。 喜欢...

回答 1 投票 0

TypeVarTuple 的类型参数列表不能为空

我有以下类型的参数化信号: from __future__ 导入注释 从 Typing_extensions 导入 Callable、TypeVarTuple、Generic、Unpack、List、TypeVar VarArgs = TypeVarTuple('VarA...

回答 1 投票 0

Scala 3 通用元组:类型绑定并转换为 Seq

我有两个问题,我认为它们是相关的。 我想要一个元组类型,其中元组的所有元素至少是一个 Animal,在 Scala 3.3.1 中。我想出了以下几点: // 在再现中...

回答 1 投票 0

基数导致元组解构出现问题

当将 Base 添加到以下代码中时,为什么 OCaml 编译器期望 h 和 w 为整数? tup 应该是一个元组 - 有语法问题吗?到底是什么 Base 导致了这个 e...

回答 2 投票 0

OCaml - 基本导致元组解构问题

当将 Base 添加到以下代码中时,为什么 OCaml 编译器期望 h 和 w 为整数? tup 应该是一个元组 - 有语法问题吗?到底是什么 Base 导致了这个 e...

回答 2 投票 0

如何将viz.visualize_image_attr的返回保存为图像Python

我需要使用的返回值 viz.visualize_image_attr(fa_attr_without_max[0].cpu().detach().permute(1, 2, 0).numpy(), sign="all", title="积分梯度") 作为图像...

回答 2 投票 0

为什么Python中向量的维数是(N,)而不是(N,1)?

在Python中,我正在编写代码,在某些时候处理矩阵(可能是向量)X并考虑它的维度。我想将每个维度分别存储在变量 m 和 n 中。 如果...

回答 4 投票 0

Python 中向量的大小是 (N,) 而不是 (N,1)

在Python中,我正在编写代码,在某些时候处理矩阵(可能是向量)X并考虑它的维度。我想将每个维度分别存储在变量 m 和 n 中。 如果...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.