首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python从同一行的列表中返回特定项

Python从同一行的列表中返回特定项
EN

Stack Overflow用户
提问于 2019-06-20 11:54:53
回答 2查看 731关注 0票数 0

我有一个清单的项目,我需要与具体的“关键”项目分开。假设我需要"X“->后面的所有项--列表可能如下所示:Y1 1-2 X1 3-5 Z1 6-8, Y2 3-5 X2 5-7 Z2 5-9,所以我需要取X”值“,即3-55-7。这些应该以这样的方式返回:3 4 55 6 7,以及它们自己的行,以便可以在其他函数中使用它们。

我也试过把“X”放在它自己的字典里,但问题仍然是一样的。我也知道end=“,但这对我没有帮助。

代码语言:javascript
复制
def get_x_values(list_parameter):  

list_of_items = []
list_of_x = []

for i in list_parameter:
    i = i.split(' ')
    for item in i:
        if item != '':
            list_of_items.append(item)
for item, next_item in zip(list_of_items, list_of_items[1:]):
    if item == 'X':
        list_of_x.append(next_item)
for x in list_of_x:
    for i in range(int(x[0]), int(x[-1]) + 1):
       yield i

当我循环收益率值时,得到的X值如下:

代码语言:javascript
复制
3
4
5
5
6
7 

当我这样需要他们的时候:

代码语言:javascript
复制
3 4 5
5 6 7

任何帮助都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-20 12:29:57

我修改了你的代码,这样它就能工作了。

代码语言:javascript
复制
def get_x_values(list_parameter): 
    list_of_items = []

    for i in list_parameter:
        i = i.split(' ')
        for item in i:
            if item != '':
                list_of_items.append(item)

    for item, next_item in zip(list_of_items, list_of_items[1:]):
        if item == 'X':
            range_list = list(range(int(next_item[0]), int(next_item[-1]) + 1))
            yield " ".join(str(number) for number in range_list)


lst = ["Y 1-2 X 3-5 Z 6-8", "Y 3-5 X 5-7 Z 5-9"]
result = get_x_values(lst)

for x in result:
    print(x)

然而,这不是最优雅的解决方案。但我想这对你来说更容易理解,因为它非常接近你自己的尝试。

希望它能帮到你。如果还有什么问题,请告诉我。祝您今天愉快!

票数 1
EN

Stack Overflow用户

发布于 2019-06-20 12:21:22

你需要

  • 把你的单子分开(你明白了)
  • 把键和值放在一起(你用zip,我用一个词来理解)
  • 将值拆分为数字并转换为int
  • 从您的int转换值中创建一个范围,以填充缺失的数字。

例如:

代码语言:javascript
复制
# there is a pesky , in your string, we strip it out
inp = "Y1 1-2 X1 3-5 Z1 6-8, Y2 3-5 X2 5-7 Z2 5-9"

formatted_input = [a.rstrip(",") for a in inp.split(" ")]
print(formatted_input)

# put keys and values together and convert values to int-list
as_dict = {formatted_input[a]:list(map(int,formatted_input[a+1].split("-"))) 
           for a in range(0,len(formatted_input),2)}
print(as_dict)


# create correct ranges from int-list
as_dict_ranges = {key:list(range(a,b+1)) for key,(a,b) in as_dict.items()}
print(as_dict_ranges)

# you could put all the above in a function and yield the dict-items from here:
# yield from as_dict_ranges.item()  
# and filter them for key = X.... outside

# filter for keys that start with X
for k,v in as_dict_ranges.items():
    if k.startswith("X"):
        print(*v, sep=" ")   # decompose the values and print seperated onto one line

输出:

代码语言:javascript
复制
# formatted_input
['Y1', '1-2', 'X1', '3-5', 'Z1', '6-8', 'Y2', '3-5', 'X2', '5-7', 'Z2', '5-9']

# as_dict
{'Y1': [1, 2], 'X1': [3, 5], 'Z1': [6, 8], 
 'Y2': [3, 5], 'X2': [5, 7], 'Z2': [5, 9]}

# as_dict_ranges
{'Y1': [1, 2], 'X1': [3, 4, 5], 'Z1': [6, 7, 8], 
 'Y2': [3, 4, 5], 'X2': [5, 6, 7], 'Z2': [5, 6, 7, 8, 9]}

# output for keys X...
3 4 5
5 6 7

如果不想打印地图(int,.),可以省略一个列表转换。价值:

代码语言:javascript
复制
as_dict = {formatted_input[a]:map(int,formatted_input[a+1].split("-")) 
           for a in range(0,len(formatted_input),2)}

文档:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56685428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档