小编Bal*_*Ben的帖子

将子列表结构复制到Python中另一个相等长度的列表

说我有一个清单,

list1 = ['Dog', 'Cat', 'Monkey', 'Parakeet', 'Zebra']
Run Code Online (Sandbox Code Playgroud)

而另一个,

list2 = [[True, True], [False], [True], [False]]
Run Code Online (Sandbox Code Playgroud)

(你可以想象第二个列表是用动物作为家养宠物的itertools.groupby创建的.)

现在说我想给第一个列表提供与第二个列表相同的子列表结构.

list3 = [['Dog', 'Cat'], ['Monkey'], ['Parakeet'], ['Zebra']]
Run Code Online (Sandbox Code Playgroud)

我可能会这样做:

list3 = []
lengths = [len(x) for x in list2]
count = 0
for leng in lengths:
    templist = []
    for i in range(leng):   
        templist.append(list1[count])
        count += 1
    list3.append(templist)
Run Code Online (Sandbox Code Playgroud)

我没有完全调试,但我认为应该工作.我的问题是,是否有更多的pythonic或简单的方法来做到这一点?这似乎有点令人费解,我不得不想象有一种更优雅的方式来做这件事(也许是在永远不会给我留下深刻印象的itertools).

python list

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

创建一个类型本身 - 而不是它的实例 - 符合协议

我想知道Swift中是否有可能使类型符合协议,因此我可以将类型本身视为符合协议,就像通常将实例视为符合协议一样.示例代码:

protocol P {
    func f()
}

class C where C.self: P { // Not actual code
    static func f() {
        print("Because C.f: ()->() exists, C.self should satisfy the protocol.")
    }
}
Run Code Online (Sandbox Code Playgroud)

swift swift-protocols

7
推荐指数
0
解决办法
251
查看次数

在“macro_rules!”的字符串文字中插入“ident”

是否可以将macro_rules!类型的变量插入ident宏中的字符串文字中?换句话说,是否可以“转义”文字的双引号?

// `trace_macros!` requires nightly
#![feature(trace_macros)]
trace_macros!(true);

macro_rules! export_mod_if_feature {
    ($system:ident) => {
        #[cfg(target_os = "$system")] // <-- problem is here
        pub mod $system;
    };
}

export_mod_if_feature!(linux);

// ... should translate to:
#[cfg(target_os = "linux")]
pub mod linux;

// ... but instead it becomes:
#[cfg(target_os = "$system")]
pub mod linux;
Run Code Online (Sandbox Code Playgroud)

我尝试过使用#[cfg(target_os = stringify!($system))],但cfg需要一个实际的字符串文字target_os =,而不仅仅是一个编译时字符串。

rust rust-macros

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

如何将 tkinter 添加到诗歌中的 pyproject.toml 中?

  File "project.py", line 5, in <module>
    from tkinter.filedialog import askopenfilenames
ModuleNotFoundError: No module named 'tkinter'
Run Code Online (Sandbox Code Playgroud)

当我想用诗歌运行 python project.py 运行我的项目时,这种情况总是会发生,但如果我本机运行它就可以完美地工作。所以我猜问题是将 Tkinter 添加到 .toml 文件中,但是当我将 tk 添加到依赖项时,它无法正常工作。我应该怎么办?

python tkinter python-poetry

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

viewWillAppear不会触发属于UITabBarController的UIViewController,直到我切换标签

在我的iOS应用程序中,我有一个UITabBarController,它的viewControllers列表看起来像[vc1, vc2],它们分别是类MyVC1MyVC2两个子类UIViewController.MyVC1覆盖viewWillAppear,覆盖的版本打印一些东西,所以我知道它什么时候被调用.(这是为了隔离我遇到的一个更大的问题,这是一个没有出现的观点.)

我的问题是,当应用程序首次启动并且vc1是选定的选项卡时,不会打印任何内容,这意味着它viewWillAppear不会被调用.如果我切换标签,然后回去vc1,东西确实得到印刷,所以vc1viewWillAppear不被调用,直到我切换回它从另一个选项卡.

有没有办法在应用启动时立即vc1拨打电话viewWillAppear,而无需切换标签?老实说,我很惊讶这不是默认行为.

uitabbarcontroller uiviewcontroller ios

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

使用locals()的Python字典理解给出了KeyError

>>> a = 1
>>> print { key: locals()[key] for key in ["a"] }
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'
Run Code Online (Sandbox Code Playgroud)

如何创建一个像这样理解的字典?

python dictionary dictionary-comprehension

4
推荐指数
1
解决办法
1193
查看次数

元素是可选的生成器如何知道何时到达终点?

Swift GeneratorType参考说明了该next方法:

next() 前进到下一个元素并返回它,如果不存在下一个元素,则返回nil.

然后在讨论中说

要求:自next()复制完成self以来未应用于副本,并且未self.next()返回任何先前的调用nil.鼓励该协议的特定实现通过调用来响应违反此要求的行为preconditionFailure("...").

如果Generator是可选类型,那么它可以nil在到达序列结束之前达到一个值.Swift如何知道它在这种情况下还没有达到目的?

swift

4
推荐指数
1
解决办法
84
查看次数

防护用例的单个表达式让关联类型进行类型转换吗?

我有以下枚举:

enum JSONData {
    case dict([String:Any])
    case array([Any])
}
Run Code Online (Sandbox Code Playgroud)

我想使用防护用例let使用类型转换进行模式匹配分配。我不仅要确保someData.array,而且要确保其关联的类型不是[Int],而不仅仅是[Any]。用单个表达式可以做到吗?类似于以下内容:

let someData: JSONData = someJSONData()
guard case let .array(anArray as [Int]) = someData
else { return }
Run Code Online (Sandbox Code Playgroud)

但是上面没有编译;错误是downcast pattern value of type '[Int]' cannot be used。我知道以下是可能的,但如果可能的话,我宁愿用一个表达式来完成。

guard case let .array(_anArray) = someData, let anArray = _anArray as? [Int]
else { return }
Run Code Online (Sandbox Code Playgroud)

编辑于2018年4月27日:此情况的更新:您现在可以使用以下语法,只要强制转换类型不是Collection

enum JSONData {
    case dict([String:Any])
    case array(Any)  // Any, not [Any]
}

func …
Run Code Online (Sandbox Code Playgroud)

swift swift3

4
推荐指数
1
解决办法
3045
查看次数