私信  •  关注

Mark

Mark 最近回复了
1 年前
回复了 Mark 创建的主题 » 特定格式的Python字典输出列表

你可以用 dict.setdefault 当第一次看到密钥时,创建一个空列表的基本子目录。然后再加上。最终结果将是 dict.values() :

vpcs = [{'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-aaaaa'},
        {'ResourceOwnerId': '222222222222', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ccccc'},
        {'ResourceOwnerId': '111111111111', 'ResourceType': 'vpc', 'ResourceId': 'vpc-ddddd'}]

groups = {}

for d in vpcs:
    k = d['ResourceOwnerId']
    groups.setdefault(k, {'account_number':k, 'vpc':[]} )['vpc'].append(d['ResourceId'])
    
list(groups.values())

这将给你:

[{'account_number': '111111111111', 'vpc': ['vpc-aaaaa', 'vpc-ddddd']},
 {'account_number': '222222222222', 'vpc': ['vpc-ccccc']}]
1 年前
回复了 Mark 创建的主题 » 如果两个元素相邻,则在Python中拆分列表

你可以 zip() 列表本身带有偏移量以获得对。然后找到你正在寻找的一对的索引(假设这种情况发生一次,或者你只关心第一个)。然后把清单拼接起来:

test = [3,5,7,1,10,17]

def partition_on_pair(test, pair):
    index = next((i for i, n in enumerate(zip(test, test[1:])) if n == pair), len(test))
    return test[:index], test[index:]

partition_on_pair(test, (10, 17))
# ([3, 5, 7, 1], [10, 17])

partition_on_pair(test, (10, 19)) # doesn't exist, so you get an empty
#([3, 5, 7, 1, 10, 17], [])


partition_on_pair(test, (5, 7))
#([3], [5, 7, 1, 10, 17])

partition_on_pair(test, (3,5))
#([], [3, 5, 7, 1, 10, 17])
2 年前
回复了 Mark 创建的主题 » Python中异常处理中的异常

这个 Python docs 有这个:

如果在执行try子句期间发生异常,则 例外情况可以通过except子句处理。如果没有例外 由exception子句处理,在 最后条款已经执行。

因此,在您的示例中,您没有捕获内部异常,这会导致 finally 要执行的块(在重新引发原始异常之前)。中国的例外 最后 在有机会重新引发原始异常之前,将其踢到外部块。外部块从未看到被零除的异常。

这与 return 从中的函数 最后 :

def ex_test():
    try:
        try:
            1/0
        finally:
            return "finally"
    except Exception as e:
        print(e) # never gets here

ex_test()
# only prints "finally"
# never re-raises the exception

可以 获取有关原始异常的一些信息。从…起 the docs :

在exception或finally中引发(或重新引发)异常时 条款 上下文 自动设置为上次捕获的异常; 如果新的异常没有得到处理,那么最终将进行回溯 显示的将包括原始异常和最终异常 例外

所以:

try:
    try:
        1/0
    finally:
        raise Exception("Exception!")
except Exception as e:
    print(e.__context__)

# prints: "division by zero"
1 年前
回复了 Mark 创建的主题 » 如何在Python中打印绿色心形符号?

'\u1F49' 是希腊文大写字母Omicron随以Dasia: Ὁ . '\u1F49A' 是同一个角色加上一个 A 字面意义的这是因为 \u 需要16位十六进制值或4个十六进制字符。如果你想传递更大的价值,你需要使用资本 \U 并传入完整的32位十六进制值:

print('\U0001F49A')
# 💚

看到了吗 python docs 更多信息

2 年前
回复了 Mark 创建的主题 » 如何从GitLab管道向电报发送通知?

所以,我们将一步一步地讲:

  1. 创建一个电报机器人
  2. 将bot添加到电报组
  3. 查找电报组Id
  4. 通过GitLab管道发送消息

1.创建一个电报机器人

电报本身对此有足够好的指示:

https://core.telegram.org/bots#6-botfather

指令没有明确说明任何内容,但要生成指令,您必须与BotFather聊天。 最后你会得到一个机器人令牌,比如 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

2.将bot添加到电报组

切换到Telegram组,并将创建的bot添加为成员(按名称查找bot)。

3.查找电报组Id

在浏览器中获取机器人的更新状态: https://api.telegram.org/bot<YourBOTToken>/getUpdates

在响应中查找聊天id: ... "chat": {"id": <YourGroupID>, ...

有关更多详细信息,请参阅: Telegram Bot - how to get a group chat id?

4.通过GitLab管道发送消息

用curl命令发送消息。例如,gitlab管道中的一个现有阶段可以为此目的进行扩展:

upload:
  stage: deploy
  image: alpine:latest
  script:
    - 'apk --no-cache add curl'
    - 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"<YourGroupID>\", \"text\": \"CI: new version was uploaded, see: https://preview.startup.com\"}" https://api.telegram.org/bot<YourBOTToken>/sendMessage '
  only:
    - main

记住要适应环境 YourBOTToken YourGroupID ,以及消息的文本。

*)我们在这里使用阿尔卑斯码头的图片,所以必须安装curl - 'apk --no-cache add curl' .对于其他图像,这可能必须以不同的方式完成。

1 年前
回复了 Mark 创建的主题 » Python列表理解:从2个列表构建一个列表

这是一个生成器表达式: (item for i in range(skills[index]) 如果你想要一个列表列表,你需要使用 [] 在理解力之内。

考虑到所需的输出,使用 zip 这两个列表并避免 range .然后嵌套理解以使其平坦:

colors = ["#F1A141", "#52D987", "#12A3FF", "#FF3F94", "#564DA6"]
skills = [3, 4, 4, 2, 3]

[c for color, n in zip(colors, skills) for c in [color] * n]

生产:

['#F1A141',
 '#F1A141',
 '#F1A141',
 '#52D987',
 '#52D987',
 '#52D987',
 '#52D987',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#12A3FF',
 '#FF3F94',
 '#FF3F94',
 '#564DA6',
 '#564DA6',
 '#564DA6']

你可以要求 next 如果9在带有 None 如果找不到:

lst = [[2,4,5,6], [0,1,3,7], [],  [8,9], [10, 11,12]]

next((l for l in lst if 9 in l), None)
# [8, 9]
2 年前
回复了 Mark 创建的主题 » 如何在Python中基于元组内容拆分列表

类似于@eshirvana,但使用defaultdict,这对于此类问题来说非常有效且常见。我会制作一个defaultdict,并根据最后一个元素确定的键保存元组列表。然后你们所有的小组都会在 values()

from collections import defaultdict

l = [(1,2,'x'), (2,3,'x'), (1,2,'z'), (2,20,'z'), (3,4,'x')]

groups = defaultdict(list)

for t in l:
    groups[t[-1]].append(t)
    
list(groups.values())
# [[(1, 2, 'x'), (2, 3, 'x'), (3, 4, 'x')], [(1, 2, 'z'), (2, 20, 'z')]]
2 年前
回复了 Mark 创建的主题 » 如何在Python中散列列表的元组

您可以将内部列表变成元组,这将使整个键不可变:

x=[[0, 0], [1, 1], [2, 0], [3, 1]]
key = tuple(tuple(l) for l in x)

y={}
y[key]=1

print('y: ',y)
# y:  {((0, 0), (1, 1), (2, 0), (3, 1)): 1}

这是个打字错误。替换 if rand not in list: lis.append(rand) 具有 if rand not in lis: lis.append(rand)

便笺列表->lis

5 年前
回复了 Mark 创建的主题 » 在python中删除多维数组中的重复值

也许不是最短的,但像这样的东西会起作用:

arrs = [
[125.25,129,128,129],
[124.25,127,130,131],
[126,126,125,124],
[126,124,130,124]
]

alreadyExisting = []
removedDuplicatesArr = []

for arr in arrs:
    newArr = []
    for i in arr:
        if i not in alreadyExisting:
            alreadyExisting.append(i)
            newArr.append(i)
    if newArr:
        removedDuplicatesArr.append(newArr)

print(removedDuplicatesArr)

您可以使用字符类来匹配数字,如下所示 [0-9] .如果你把他们两个放在一起,你会匹配00-99。如果你把 ? 在其中一个之后,它是可选的,所以你将匹配0-99。要强制1-99,请将非可选设置为如下 [1-9] .最后,您需要确保在使用^的一个或两个数字之前或之后没有任何内容,它与字符串的开头匹配,$与结尾匹配。

if (category.match(/^[1-9][0-9]?$/)){
    console.log("ok")
} else {
    console.log("not ok")
}

建议:

如果你想在一个单独的环境中漫步,你应该选择一些类似流浪者的东西。

如果您打算使用Docker,请尝试这种方法。
您可以将任何代码放在Ruby文件中,无论您想放什么。

$ docker run -it -v $(pwd)/:/data ruby:2.5 ruby -- /data/hello.rb
  hello world!

Perl -有趣的是之前有这么多答案