这是我的琴弦
a = '(20.0, 8.0, 8.0, 37.0)'
并且我只希望前三个项目采用这种格式
str = 20.0x8.0x8.0
并将最后一项存储在列表中。
leftover = [37.0]
之前我在字符串中只有3个维,因此我多次使用replace函数对其进行转换。
converted = str(''.join(str(v) for v in a)).replace("(","").replace(")","").replace(", ","x")
我知道这不是最pythonic的方法,但它可以解决问题。但是我不知道如何从str(tuple)中删除元素
答案 0 :(得分:4)
使用ast.literal_eval
:
import ast
a = '(20.0, 8.0, 8.0, 37.0)'
a_tupl = ast.literal_eval(a)
string = 'x'.join(map(str, a_tupl[:3])) # 20.0x8.0x8.0
leftover = [a_tupl[-1]] # [37.0]
str
,因为它会掩盖内置变量。
答案 1 :(得分:1)
尝试一下:
[HttpGet]
[Route("CreateCardGroup")]
public ActionResult CreateCardGroup()
{
PopulateCreateCardGroupLookups();
return View();
}
[HttpPost]
[Route("CreateCardGroup")]
public ActionResult CreateCardGroup(CardGroupCreateDto dto)
{
if (!ModelState.IsValid)
{
PopulateCreateCardGroupLookups();
return View(dto);
}
if(!UnitOfWork.DiscountPatternRepository
.IsCardGroupDateInRange(dto.DiscountPatternId,
dto.ActiveFromDate, dto.ActiveToDate))
{
ModelState.AddModelError("ActiveFromDate", @"Error In Date.");
PopulateCreateCardGroupLookups();
return View(dto); <---Problem Here
}
var group = dto.LoadFrom();
var insertedId = UnitOfWork.CardGroupRepository.Add(group);
foreach (var rangeDto in group.CardGroupGiftSerialRanges)
{
for (var i = rangeDto.GiftCardSerialBegin; i <=
rangeDto.GiftCardSerialEnd; i++)
{
var serial =
UnitOfWork.GiftCardSerialRepository.GetBySerial(i);
if (serial != null)
{
serial.CardGroupGiftSerialRangeId = rangeDto.Id;
serial.DiscountPatternId = group.DiscountPatternId;
UnitOfWork.Complete();
}
}
}
return Redirect("/CardGroup");
}
private void PopulateCreateCardGroupLookups()
{
var discounts =
UnitOfWork.DiscountPatternRepository.GetNotExpireDiscountPattern();
var discountDtos = discounts?.Select(c => new SelectListItem
{
Text = c.PatternTitle,
Value = c.Id.ToString()
}).ToList();
ViewData["DiscountPatterns"] = discountDtos;
var serials =
UnitOfWork.ChargeCardSerialRepository.GetNotAssignedSerials();
var serialDtos = serials?.Select(c => new SelectListItem
{
Text = c.SerialNumber.ToString(),
Value = c.Id.ToString()
}).ToList();
ViewData["ChargeSerials"] = serialDtos;
ViewData["CardSerialCount"] =
UnitOfWork.GiftCardSerialRepository.GetNotUsedGiftSerials();
}
输出:
from ast import literal_eval
str1 = "x".join([str(k) for k in literal_eval(a)[:3]])
leftover = [literal_eval(a)[-1]]
不导入'20.0x8.0x8.0'
[37.0]
:
ast
答案 2 :(得分:1)
您可以对拆分后的字符串使用简单的LC,以从元组的字符串表示形式中获取值列表。
没有库,只有一个简单的python oneliner ...:
a = '(20.0, 8.0, 8.0, 37.0)'
l = [float(v) for v in a[1:-1].split(',')]
# [20.0, 8.0, 8.0, 37.0]
然后轻松创建所需的两个结果:
str('x'.join([str(v) for v in l[:3]]))
# '20.0x8.0x8.0'
[l[-1]]
# [37.0]